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()),
    # ...
]

原文地址:https://www.cnblogs.com/dontgiveup/p/9795765.html

时间: 2024-11-08 22:35:38

Django - 聚合内容 RSS/Atom的相关文章

SharePoint DataFormWebPart 通过Caml和xslt聚合内容

以下是一个例子,SPDataSource用于查询内容,DatasourceMode属性指定查询范围(网站集,网站,列表),SelectCommand是Caml查询:Xsl展示内容,下面列子是用table展示. <WebPartPages:DataFormWebPart runat="server" EnableOriginalValue="False" ViewFlag="8" ViewContentTypeId=""

Django 聚合与查询集API

本文从Django官方文档总结而来,将聚合的主要用法和查询集的常见方法做一归纳. 聚合 1. 聚合的产生来源于django数据库查询,通常我们使用django查询来完成增删查改,但是有时候需要更复杂的方法才能完成对数据的提取.筛选.更改,所以需要一组对象聚合来完成这种操作.模型举例如下: from django.db import models class Author(models.Model): name = models.CharField(max_length=100) age = mo

django 聚合函数

Talk is cheap,show you the code! 聚合函数 Sum的用法: total_sale_num = Saleinfo.filter(product_id="9321374", sku_id=1).aggregate(total_sale_num=Sum('sale_num')).get('total_sale_num') or 0 求出销售信息中的商品id为9321374,规格id为1的销售总数

读《图解HTTP》总结--第十章

构建Web内容的技术 在Web刚出现时,我们只能浏览那些页面样式简单的内容.如今,Web使用各种各样的技术,来呈现丰富多彩的内容. 10.1  HTML 10.1.1 页面几乎全由HTML构建 HTML(HyperText Markup Language,超文本标记语言)是为了发送Web上的超文本而开发的标记语言.超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本.标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言.我们把出现在HT

Django输出非HTML内容

通常当我们谈到开发网站时,主要谈论的是HTML.当然,Web远不只有HTML,我们在Web上用多种格式来发布数据:RSS.PDF.图片等. 到目前为止,我们的注意力都是放在常见 HTML代码生成上,但是在这一章中,我们将会对使用 Django生成其它格式的内容进行简要介绍. Django拥有一些便利的内建工具帮助你生成常见的非HTML内容: § RSS/Atom聚合文件 § 站点地图(一个XML格式文件,最初由Google开发,用于给搜索引擎提示线索) 我们稍后会逐一研究这些工具,不过首先让我们

对下载到RSS阅读器里订阅内容

网络推广方法有很多,RSS推广就是其中的一种,RSS订阅能够为网站增加访问量,这是众人皆知的事实.不过,如何推广RSS,让更多人知道并促使更多人订阅RSS,却是一个很大的问题.下面就有我给大家讲解一下什么事RSS推广,如何利用RSS进行网络推广. 首先来说说什么是RSS? RSS是在线共享内容的一种简单方式(也叫聚合内容,Really Simple Syndication).通常在时效性比较强的内容上使用RSS订阅能更快速获取信息.网站提供RSS输出,有利于让用户获取网站内容的最新信息.网络用户

django的聚合函数和aggregate、annotate方法使用

支持聚合函数的方法: 提到聚合函数,首先我们要知道的就是这些聚合函数是不能在django中单独使用的,要想在django中使用django聚合函数,就必须把这些聚合函数放到支持他们的方法内,这样才能执行.支持聚合函数的方法有两种,分别是aggregate和annotate,这两种方法执行的原生SQL以及结果都有很大的区别,下面我们以实例操作的方式一一介绍: # 示例模型: class Author(models.Model): """作者模型"""

Django 1

Django 1.10文档中文版Part1 本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正.另外对于公开文档进行翻译的版权问题不是很清楚,如有侵权请联系我! 目录 第一章.Django1.10文档组成结构1.1 获取帮助1.2 文档的组织形式1.3 第一步1.4 模型层1.5 视图层1.6 模板层1.7 表单1.8 开发流程1.9 admin站点1.10 安全性1.11 国际化和本地化1.12 性能和优化1.13 Pytho

Django 1.10文档中文版Part1

目录 第一章.Django1.10文档组成结构1.1 获取帮助1.2 文档的组织形式1.3 第一步1.4 模型层1.5 视图层1.6 模板层1.7 表单1.8 开发流程1.9 admin站点1.10 安全性1.11 国际化和本地化1.12 性能和优化1.13 Python兼容性1.14 地理框架1.15 常用WEB应用工具1.16 其它核心功能1.17 Django开源项目 第二章.起步2.1 Django速览 2.1.1 设计你的模型model 2.1.2 安装model 2.1.3 使用AP