给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()), )