简述
Django 带有一个联合提要生成框架。有了它,您只需通过子类化即可创建 RSS 或 Atom 提要django.contrib.syndication.views.Feed class.
让我们为应用程序上的最新评论创建一个提要(另见 Django - 评论框架章节)。为此,让我们创建一个 myapp/feeds.py 并定义我们的提要(您可以将提要类放在代码结构中的任何位置)。
from django.contrib.syndication.views import Feed
from django.contrib.comments import Comment
from django.core.urlresolvers import reverse
class DreamrealCommentsFeed(Feed):
title = "Dreamreal's comments"
link = "/drcomments/"
description = "Updates on new comments on Dreamreal entry."
def items(self):
return Comment.objects.all().order_by("-submit_date")[:5]
def item_title(self, item):
return item.user_name
def item_description(self, item):
return item.comment
def item_link(self, item):
return reverse('comment', kwargs = {'object_pk':item.pk})
-
在我们的饲料类中,title,link, 和description属性对应标准RSS<title>,<link>和<description>元素。
-
这items方法,返回应该作为项目元素进入提要的元素。在我们的例子中,最后五个评论。
-
这item_title方法,将获得我们的提要项目的标题。在我们的例子中,标题将是用户名。
-
这item_description方法,将获得将作为我们的提要项目的描述的内容。在我们的例子中,评论本身。
-
这item_link方法将建立到完整项目的链接。在我们的例子中,它会让你看到评论。
现在我们有了我们的提要,让我们在views.py中添加一个评论视图来显示我们的评论 -
from django.contrib.comments import Comment
def comment(request, object_pk):
mycomment = Comment.objects.get(object_pk = object_pk)
text = '<strong>User :</strong> %s <p>'%mycomment.user_name</p>
text += '<strong>Comment :</strong> %s <p>'%mycomment.comment</p>
return HttpResponse(text)
我们还需要 myapp urls.py 中的一些 URL 用于映射 -
from myapp.feeds import DreamrealCommentsFeed
from django.conf.urls import patterns, url
urlpatterns += patterns('',
url(r'^latest/comments/', DreamrealCommentsFeed()),
url(r'^comment/(?P\w+)/', 'comment', name = 'comment'),
)
访问 /myapp/latest/comments/ 时,您将获得我们的提要 -
然后单击其中一个用户名将带您进入:/myapp/comment/comment_id,如我们之前评论视图中定义的那样,您将获得 -
因此,定义 RSS 提要只是对提要类进行子分类并确保定义了 URL(一个用于访问提要,一个用于访问提要元素)。正如评论一样,这可以附加到您应用程序中的任何模型。