在相应App下新增rss.py文件:
class LatestPostFeed(Feed):
feed_type = Rss201rev2Feed
title = "Typeidea Blog System"
link = "/rss/"
description = "typeidea is a blog system power by django"
def items(self):
return Post.objects.filter(status=Post.STATUS_NORMAL)[:5]
def item_title(self, item):
return item.title
def item_description(self, item):
return item.desc
def item_link(self, item):
return reverse('post-detail', args=[item.pk])
其中feed_type可以不写,默认使用Rss201rev2Feed,这里写出来是标明这个地方可以被赋值为其他类型。可以进行定制。
上面的代码并没有输出正文部分,我们可以通过定义feed_type来实现:
from django.contrib.syndication.views import Feed
from django.urls import reverse
from django.utils.feedgenerator import Rss201rev2Feed
from blog.models import Post
class ExtendedRSSFeed(Rss201rev2Feed):
def add_item_elements(self, handler, item):
super(ExtendedRSSFeed, self).add_item_elements(handler, item)
handler.addQuickElement('content:html', item['content_html'])
# 定义ExtendedRSSFeed类重写 add_item_elements 方法,实现自定义输出
# addQuickElement(), 第二个参数中的comment_html是模型中的一个字段
class LatestPostFeed(Feed):
feed_type = ExtendedRSSFeed
title = "Typeidea Blog System"
link = "/rss/"
description = "typeidea is a blog system power by django"
def items(self):
return Post.objects.filter(status=Post.STATUS_NORMAL)[:5]
def item_title(self, item):
return item.title
def item_description(self, item):
return item.desc
def item_link(self, item):
return reverse('post-detail', args=[item.pk])
def item_extra_kwargs(self, item):
return {'content_html': self.item_content_html(item)}
def item_content_html(self, item):
return item.content_html