先了解下Rss feed 的介绍及xml的格式 再开始django feed的学习。详见http://blog.xuite.net/tolarku/blog/11006241-RSS+feed+%E4%B9%8B+XML+%E6%A0%BC%E5%BC%8F。
feed 是一个信息的聚合方式常见有rss和Atom 两种,类似于动态的书签.feed中包含了该网站,博客等的信息.当用户订阅该feed时,如果内容出现更新,feed也动态更新。用户就可以通过feed reader来获取该feed的更新情况。达到不刷新网站也可以了解最新动态的效果。
创建一个简单的feed:
from django.contrib.syndication.views import Feed
from django.core.urlresolvers import reverse
from chicagocrime.models import NewsItem #数据库
class LatestEntriesFeed(Feed):
title = "Chicagocrime.org site news" #feed的标题
link = "/sitenews/"#链接
description = "Updates on changes and additions to chicagocrime.org."#描述
def items(self):
return NewsItem.objects.order_by('-pub_date')[:5] #返回前5个项目 按pub_date的逆序排列
def item_title(self, item):#项目的标题
return item.title
def item_description(self, item):
return item.description
# item_link is only needed if NewsItem has no get_absolute_url method.
def item_link(self, item):
return reverse('news-item', args=[item.pk])
from django.conf.urls import patterns from myproject.feeds import LatestEntriesFeed urlpatterns = patterns('', # ... (r'^latest/feed/$', LatestEntriesFeed()), # ... )title,link,description 对应的是标准RSS中的<title>,<link>,<description>。
items()是返回一个用以包含在包含在feed的 <item> 元素里的 list
如果想建立Atom的话用subtitle属性代替description属性
如果要指定 <title> 和 <description> ,可以建立一个Django模板名字叫 feeds/latest_title.html 和 feeds/latest_description.html ,后者是URLConf里为对应feed指定的slug 。注意 .html 后缀是必须的。
RSS系统模板渲染每一个条目,需要给传递2个参数给模板上下文变量:
obj : 当前对象 ( 返回到items() 任意对象之一 )。
site : 一个表示当前站点的 django.models.core.sites.Site 对象。 这对于 {{ site.domain }} 或者 {{ site.name }} 很有用。
你也可以通过修改 Feed 类中的两个属性title_template 和 description_template 来改变这两个模板的名字。
get_absolute_url() 和 item_link() 都应该以Python字符串形式返回URL。