给Python的Django框架下搭建的BLOG添加RSS功能的教程
前些天有位网友建议我在博客中添加RSS订阅功能,觉得挺好,所以自己抽空看了一下如何在Django中添加RSS功能,发现使用Django中的syndicationfeedframework很容易实现。
具体实现步骤和代码如下:
1、Feed类
#-*-coding:utf-8-*- fromdjango.confimportsettings fromdjango.contrib.syndication.viewsimportFeed fromdjango.utils.feedgeneratorimportRss201rev2Feed fromblog.modelsimportArticle from.constantsimportSYNC_STATUS classExtendedRSSFeed(Rss201rev2Feed): mime_type='application/xml' """ CreateatypeofRSSfeedthathascontent:encodedelements. """ defroot_attributes(self): attrs=super(ExtendedRSSFeed,self).root_attributes() attrs['xmlns:content']='http://purl.org/rss/1.0/modules/content/' returnattrs defadd_item_elements(self,handler,item): super(ExtendedRSSFeed,self).add_item_elements(handler,item) handler.addQuickElement(u'content:encoded',item['content_encoded']) classLatestArticleFeed(Feed): feed_type=ExtendedRSSFeed title=settings.WEBSITE_NAME link=settings.WEBSITE_URL author=settings.WEBSITE_NAME description=settings.WEBSITE_DESC+u"关注python、django、vim、linux、web开发和互联网" defitems(self): returnArticle.objects.filter(hided=False,published=True,sync_status=SYNC_STATUS.SYNCED).order_by('-publish_date')[:10] defitem_extra_kwargs(self,item): return{'content_encoded':self.item_content_encoded(item)} defitem_title(self,item): returnitem.title #item_linkisonlyneededifNewsItemhasnoget_absolute_urlmethod. defitem_link(self,item): return'/article/%s/'%item.slug defitem_description(self,item): returnitem.description defitem_author_name(self,item): returnitem.creator.get_full_name() defitem_pubdate(self,item): returnitem.publish_date defitem_content_encoded(self,item): returnitem.content
2、URL配置
fromdjangoimportVERSION ifVERSION[0:2]>(1,3): fromdjango.conf.urlsimportpatterns,include,url else: fromdjango.conf.urls.defaultsimportpatterns,include,url from.feedsimportLatestArticleFeed urlpatterns=patterns( '', url(r'^feed/$',LatestArticleFeed()), )