Django RSS


Django帶有聚合feed生成框架。有了它,你可以建立RSS或Atom只需繼承django.contrib.syndication.views.Feed類。

讓我們建立一個訂閱源的應用程式。

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類, title, link 和 description 屬性對應標準RSS 的<title>, <link> 和 <description>元素。

  • 條目方法返回應該進入feed的item的元素。在我們的範例中是最後五個注釋。

現在,我們有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中對映 ?

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 類的子類,並確保這些URL(一個用於存取feed,一個用於存取feed元素)的定義。 正如評論,這可以連線到您的應用程式的任何模型。