给Python的Django框架下搭建的BLOG添加RSS功能的教程


Posted in Python onApril 08, 2015

前些天有位网友建议我在博客中添加RSS订阅功能,觉得挺好,所以自己抽空看了一下如何在Django中添加RSS功能,发现使用Django中的syndication feed framework很容易实现。

    具体实现步骤和代码如下:

    1、Feed类

# -*- 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配置

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()),
)
Python 相关文章推荐
Python实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
深入解析Python中的上下文管理器
Jun 28 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
May 10 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
Python 经典算法100及解析(小结)
Sep 13 Python
python多进程(加入进程池)操作常见案例
Oct 21 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
python3 hdf5文件 遍历代码
May 19 Python
在Python中使用NLTK库实现对词干的提取的教程
Apr 08 #Python
使用Python操作Elasticsearch数据索引的教程
Apr 08 #Python
用Python实现协同过滤的教程
Apr 08 #Python
在Python中调用ggplot的三种方法
Apr 08 #Python
Python字符串和文件操作常用函数分析
Apr 08 #Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 #Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 #Python
You might like
WordPress判断用户是否登录的代码
2011/03/17 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
聊聊Python中的pypy
2018/01/12 Python
Python打印输出数组中全部元素
2018/03/13 Python
树莓派实现移动拍照
2019/06/22 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
JDK安装目录下有哪些内容
2014/08/25 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
Java如何调用外部Exe程序
2015/07/04 面试题
电信专业应届生自荐信
2013/09/28 职场文书
自荐信如何“自荐”
2013/10/24 职场文书
优秀毕业大学生推荐信
2013/11/13 职场文书
教师开学感言
2014/02/14 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers
mysql序号rownum行号实现方式
2022/12/24 MySQL