给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协程用法实例分析
Jun 04 Python
python实现一组典型数据格式转换
Dec 15 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
python argparser的具体使用
Nov 10 Python
用python3读取python2的pickle数据方式
Dec 25 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
Python中如何引入第三方模块
May 27 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
PHP 工厂模式使用方法
2010/05/18 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
js从外部获取图片的实现方法
2016/08/05 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
对python list 遍历删除的正确方法详解
2018/06/29 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
获奖感言一句话
2015/07/31 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python
python神经网络编程之手写数字识别
2021/05/08 Python
Django migrate报错的解决方案
2021/05/20 Python
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
Python日志模块logging用法
2022/06/05 Python
spring boot实现文件上传
2022/08/14 Java/Android