django 聚合内容 RSS/Atom
Django提供了一个高层次的聚合内容框架,让我们创建RSS/Atom变得简单,你需要做的只是编写一个简单的Python类。
一、范例
要创建一个feed,只需要编写一个Feed类,然后设置一条指向Feed实例的URLconf就可以了,非常简单,下面是一个示例,演示了某站点的最近五条新闻记录:
from django.contrib.syndication.views import Feed
from django.urls import reverse
from policebeat.models import NewsItem class LatestEntriesFeed(Feed):
title = "Police beat site news"
link = "/sitenews/"
description = "Updates on changes and additions to police beat central." def items(self):
return NewsItem.objects.order_by('-pub_date')[:5] def item_title(self, item):
return item.title def item_description(self, item):
return item.description # item_link is only needed if NewsItem has no get_absolute_url method.
def item_link(self, item):
return reverse('news-item', args=[item.pk])
要设置链接这个feed的URL,只需要将这个Feed类的实例,作为参数,加入URLconf,如下所示:
from django.conf.urls import url
from myproject.feeds import LatestEntriesFeed urlpatterns = [
# ...
url(r'^latest/feed/$', LatestEntriesFeed()),
# ...
]
注意:
- 新建的Feed类继承于django.contrib.syndication.views.Feed。
- title、link和description属性分别对应标准RSS的
<title>、<link>和<description>元素。 - items()方法简单地返回此Feed需要包含的对象,列表形式。
- 如果你要创建一个Atom feed,而不是RSS feed,使用subtitle属性替代description。
还有一件事要做。在一个 RSS feed中,每一个<item>都有一个<title>, <link> 和<description>, 我们需要告诉框架往这些对象里放入哪些数据。
对于
<title>和<description>,Django将尝试调用Feed类中的item_title()和item_description()方法。 这两个方法都会被传入一个参数:item,也就是对象自己。对于
<link>,Django首先会尝试调用item_link()方法,如果该方法不存在,则使用对象的ORM模型中定义的get_absolute_url()方法。
二、指定feed类型
默认情况下,使用RSS 2.0类型,如果要指定类型,在Feed类中添加feed_type属性,如下所示:
from django.utils.feedgenerator import Atom1Feed class MyFeed(Feed):
feed_type = Atom1Feed
目前可用的类型有下面三种:
- django.utils.feedgenerator.Rss201rev2Feed (RSS 2.01. Default.)
- django.utils.feedgenerator.RssUserland091Feed (RSS 0.91.)
- django.utils.feedgenerator.Atom1Feed (Atom 1.0.)
三、同时发布Atom和RSS feeds
要同时发布这两者,很简单,为你的Feed类创建一个子类,并且将其feed_type设置为你需要的类型,最后添加一条URLconf就可以了,如下所示:
from django.contrib.syndication.views import Feed
from policebeat.models import NewsItem
from django.utils.feedgenerator import Atom1Feed class RssSiteNewsFeed(Feed):
title = "Police beat site news"
link = "/sitenews/"
description = "Updates on changes and additions to police beat central." def items(self):
return NewsItem.objects.order_by('-pub_date')[:5] # 增加下面的子类
class AtomSiteNewsFeed(RssSiteNewsFeed):
feed_type = Atom1Feed # 修改类型
subtitle = RssSiteNewsFeed.description
增加路由:
from django.conf.urls import url
from myproject.feeds import RssSiteNewsFeed, AtomSiteNewsFeed urlpatterns = [
# ...
url(r'^sitenews/rss/$', RssSiteNewsFeed()),
url(r'^sitenews/atom/$', AtomSiteNewsFeed()),
# ...
]
django 聚合内容 RSS/Atom的更多相关文章
- 第六章:Django 综合篇 - 12:聚合内容 RSS/Atom
Django提供了一个高层次的聚合内容框架,让我们创建RSS/Atom变得简单,你需要做的只是编写一个简单的Python类. 一.范例 要创建一个feed,只需要编写一个Feed类,然后设置一条指向F ...
- Django聚合与分组查询中value与annotate的顺序问题
在学习Django聚合与分组查询中,发现value与annotate的顺序不同时,查询结果大相径庭,经过一下午的研究,终于弄明白了,现在分享给大家,先上结论: 结论 value在annotate前面时 ...
- Confluence 6 配置 简易信息聚合(RSS)
一个 Confluence 的管理员可以配置下面的 RSS 特性: Confluence 针对 RSS 聚合返回的最大项目数量. Confluence 针对 RSS 聚合允许的最大时间周期. 上面两个 ...
- Django -聚合分组,FQ操作, cookie, session
一. 聚合查询和分组 1. 聚合 aggregate(*args, **kwargs) 对一组数据进行统计分析, 通过对QuerySet进行计算, 返回一个聚合值得字典. arrgregate()中每 ...
- Django实现内容缓存
1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会 ...
- Django聚合分组查询、常用字段
首先回顾sql中聚合和分组的概念: 如果没有分组,会把整张表作为一个大组,查询字段必须是聚合结果:如果有分组,分组之后,必须要使用聚合的结果作为having的条件. 聚合查询 聚合:aggregate ...
- $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
一.聚合函数 from django.db.models import Avg,Sum,Max,Min,Count,F,Q #导入 # .查询图书的总价,平均价,最大价,最小价 ...
- django聚合查询
聚合¶ Django 数据库抽象API 描述了使用Django 查询来增删查改单个对象的方法.然而,有时候你需要获取的值需要根据一组对象聚合后才能得到.这份指南描述通过Django 查询来生成和返回聚 ...
- Django 聚合与查询集API实现侧边栏
本文从Django官方文档总结而来,将聚合的主要用法和查询集的常见方法做一归纳. 聚合 1. 聚合的产生来源于django数据库查询,通常我们使用django查询来完成增删查改,但是有时候需要更复杂的 ...
随机推荐
- Netty1
基于Netty4的HttpServer和HttpClient的简单实现 Netty的主页:http://netty.io/index.html 使用的Netty的版本:netty-4.0.23.Fin ...
- java Condition条件变量的通俗易懂解释、基本使用及注意点
最近在看pthread方面的书,看到条件变量一节的时候,回忆了下java中条件变量的使用方式. java中条件变量都实现了java.util.concurrent.locks.Condition接口, ...
- linux下部署git服务器
我这里用的是redhat7.4, 直接开始吧. 环境 服务端: Redhat7.4 + git(version 1.8.3.1) IP:192.168.137.168 客户端: win7 + git ...
- Linux模拟僵尸进程并kill
模拟系统有僵尸进程后怎么解决 僵尸进程 #include <stdio.h> #include <sys/types.h> int main() { //fork a chil ...
- 用C++调用tensorflow在python下训练好的模型(centos7)
本文主要参考博客https://blog.csdn.net/luoyexuge/article/details/80399265 [1] bazel安装参考:https://blog.csdn.net ...
- day5 python
一.常量 在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量.AGE_OF_OLFBOY=73二.基本运算符的补充1.算数运算符 print(10/3) print(1 ...
- myeclise中创建maven web程序
myeclipse自带了许多插件,因此使用频率很高,但是对maven框架下web程序似乎不是很好的支持,每次创建web程序总是会报一大堆的异常,因此特此记录一下如何在myeclipse下创建一个web ...
- Windows下配置Jenkins 实现自动发布maven项目至tomcat(svn+maven+tomcat)
Jenkins安装完成之后,需要我们对其配置,然后才可以实现自动部署项目. 前提 防火墙开放tomcat的8080端口 Linux(CentOS):firewall-cmd --zone=public ...
- Restful framework【第六篇】认证组件
基本用法 -认证功能 1 写一个类,继承BaseAuthentication 2 def authenticate(self,request) ,记住传request对象 -如果验证通过,返回None ...
- 修改userdata的分区大小【转】
本文转载自:https://blog.csdn.net/mike8825/article/details/49833833 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...