前些天有位网友建议我在博客中添加RSS订阅功能,觉得挺好,所以自己抽空看了一下如何在Django中添加RSS功能,发现使用Django中的syndication feed framework很容易实现。
具体实现步骤和代码如下:
1、Feed类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# -*- coding: utf-8 -*- from django.conf import settings from django.contrib.syndication.views import Feed from django.utils.feedgenerator import Rss201rev2Feed from blog.models import Article from .constants import SYNC_STATUS class ExtendedRSSFeed(Rss201rev2Feed): mime_type = 'application/xml' """ Create a type of RSS feed that has content:encoded elements. """ def root_attributes( self ): attrs = super (ExtendedRSSFeed, self ).root_attributes() attrs[ 'xmlns:content' ] = 'http://purl.org/rss/1.0/modules/content/' return attrs def add_item_elements( self , handler, item): super (ExtendedRSSFeed, self ).add_item_elements(handler, item) handler.addQuickElement(u 'content:encoded' , item[ 'content_encoded' ]) class LatestArticleFeed(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开发和互联网" def items( self ): return Article.objects. filter (hided = False , published = True , sync_status = SYNC_STATUS.SYNCED).order_by( '-publish_date' )[: 10 ] def item_extra_kwargs( self , item): return { 'content_encoded' : self .item_content_encoded(item)} def item_title( self , item): return item.title # item_link is only needed if NewsItem has no get_absolute_url method. def item_link( self , item): return '/article/%s/' % item.slug def item_description( self , item): return item.description def item_author_name( self , item): return item.creator.get_full_name() def item_pubdate( self , item): return item.publish_date def item_content_encoded( self , item): return item.content |
2、URL配置
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from django import VERSION if VERSION[ 0 : 2 ] > ( 1 , 3 ): from django.conf.urls import patterns, include, url else : from django.conf.urls.defaults import patterns, include, url from .feeds import LatestArticleFeed urlpatterns = patterns( '', url(r '^feed/$' , LatestArticleFeed()), ) |