姜戈 - RSS


Django 附带了一个联合提要生成框架。使用它,您只需通过子类化django.contrib.synmination.views.Feed 类即可创建 RSS 或 Atom 提要。

让我们为应用程序上完成的最新评论创建一个提要(另请参阅 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})
  • 在我们的 feed 类中,titlelinkdescription属性对应于标准 RSS <title><link><description>元素。

  • items方法返回应该作为 item 元素进入 feed 的元素。在我们的例子中,最后五个评论。

  • 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/ 时,您将获得我们的提要 -

Django RSS 示例

然后单击其中一个用户名将使您进入: /myapp/comment/comment_id (如我们之前的评论视图中所定义),您将得到 -

Django RSS 重定向页面

因此,定义 RSS 提要只需对 Feed 类进行子类化并确保定义 URL(一个用于访问提要,一个用于访问提要元素)即可。正如评论一样,它可以附加到应用程序中的任何模型。