📅  最后修改于: 2020-10-25 10:05:35             🧑  作者: Mango
Django带有一个联合供稿生成框架。使用它,您可以仅通过将django.contrib.syndication.views.Feed类子类化来创建RSS或Atom提要。
让我们为在该应用程序上完成的最新评论创建一个提要(另请参见Django-Comments Framework一章)。为此,让我们创建一个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
items方法,返回应作为元素添加到提要中的元素。在我们的案例中,最后五个评论。
item_title方法将获取供稿项目的标题。在本例中,标题将是用户名。
item_description方法将获得对我们的提要项目的描述。就我们而言,评论本身。
item_link方法将建立指向完整项目的链接。在我们的情况下,它将使您发表评论。
现在我们有了feed,让我们在views.py中添加评论视图以显示我们的评论-
from django.contrib.comments import Comment
def comment(request, object_pk):
mycomment = Comment.objects.get(object_pk = object_pk)
text = 'User : %s '%mycomment.user_name
text += 'Comment : %s '%mycomment.comment
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 /时,您将获得我们的feed-
然后单击其中一个用户名将使您转到:/ myapp / comment / comment_id(之前在我们的评论视图中定义),您将获得-
因此,定义RSS feed只是对Feed类进行子类化,并确保定义了URL(一个用于访问该feed和一个用于访问feed元素)的问题。就像评论一样,它可以附加到您应用中的任何模型。