Django - RSS



Django 自带一个 syndication feed 生成框架。通过它,你只需继承django.contrib.syndication.views.Feed 类就可以创建 RSS 或 Atom feeds。

让我们为应用中最新的评论创建一个 feed(另见 Django - 评论框架章节)。为此,让我们创建一个 myapp/feeds.py 并定义我们的 feed(你可以将 feeds 类放在代码结构中的任何位置)。

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 方法将获取作为 feed 项目标题的内容。在本例中,标题将是用户名。

  • item_description 方法将获取作为 feed 项目描述的内容。在本例中是评论本身。

  • 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 = '<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/ 将获得我们的 feed:

Django RSS Example

然后点击用户名之一将跳转到:/myapp/comment/comment_id(如我们之前的评论视图中定义的那样),你将获得:

Django RSS Redirected Page

因此,定义 RSS feed 只需要继承 Feed 类并确保定义了 URL(一个用于访问 feed,一个用于访问 feed 元素)。与评论一样,这可以附加到应用中的任何模型。

广告