前些天有位网友建议我在博客中添加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()),
)
|