|
|
|
|
@ -1,40 +1,51 @@
|
|
|
|
|
# 导入用户模型、RSS订阅核心类等依赖
|
|
|
|
|
from django.contrib.auth import get_user_model
|
|
|
|
|
from django.contrib.syndication.views import Feed
|
|
|
|
|
from django.utils import timezone
|
|
|
|
|
from django.utils.feedgenerator import Rss201rev2Feed
|
|
|
|
|
from django.contrib.syndication.views import Feed # Django RSS订阅基础类
|
|
|
|
|
from django.utils import timezone # 时间处理工具
|
|
|
|
|
from django.utils.feedgenerator import Rss201rev2Feed # RSS2.0格式生成器
|
|
|
|
|
|
|
|
|
|
# 导入博客文章模型和Markdown转换工具
|
|
|
|
|
from blog.models import Article
|
|
|
|
|
from djangoblog.utils import CommonMarkdown
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 自定义博客RSS订阅类,继承Django的Feed基类
|
|
|
|
|
class DjangoBlogFeed(Feed):
|
|
|
|
|
feed_type = Rss201rev2Feed
|
|
|
|
|
feed_type = Rss201rev2Feed # 指定订阅源格式为RSS2.0
|
|
|
|
|
|
|
|
|
|
description = '大巧无工,重剑无锋.'
|
|
|
|
|
title = "且听风吟 大巧无工,重剑无锋. "
|
|
|
|
|
link = "/feed/"
|
|
|
|
|
description = '大巧无工,重剑无锋.' # 订阅源描述
|
|
|
|
|
title = "且听风吟 大巧无工,重剑无锋. " # 订阅源标题
|
|
|
|
|
link = "/feed/" # 订阅源的链接地址
|
|
|
|
|
|
|
|
|
|
# 订阅源作者名称,取第一个用户的昵称
|
|
|
|
|
def author_name(self):
|
|
|
|
|
return get_user_model().objects.first().nickname
|
|
|
|
|
|
|
|
|
|
# 订阅源作者的链接,取第一个用户的个人页面地址
|
|
|
|
|
def author_link(self):
|
|
|
|
|
return get_user_model().objects.first().get_absolute_url()
|
|
|
|
|
|
|
|
|
|
# 订阅源的内容项:获取5篇已发布的文章,按发布时间倒序
|
|
|
|
|
def items(self):
|
|
|
|
|
return Article.objects.filter(type='a', status='p').order_by('-pub_time')[:5]
|
|
|
|
|
|
|
|
|
|
# 单个内容项的标题(对应文章标题)
|
|
|
|
|
def item_title(self, item):
|
|
|
|
|
return item.title
|
|
|
|
|
|
|
|
|
|
# 单个内容项的描述,将文章正文Markdown格式转为HTML
|
|
|
|
|
def item_description(self, item):
|
|
|
|
|
return CommonMarkdown.get_markdown(item.body)
|
|
|
|
|
|
|
|
|
|
# 订阅源的版权信息,动态显示当前年份
|
|
|
|
|
def feed_copyright(self):
|
|
|
|
|
now = timezone.now()
|
|
|
|
|
return "Copyright© {year} 且听风吟".format(year=now.year)
|
|
|
|
|
|
|
|
|
|
# 单个内容项的链接(对应文章详情页地址)
|
|
|
|
|
def item_link(self, item):
|
|
|
|
|
return item.get_absolute_url()
|
|
|
|
|
|
|
|
|
|
# 单个内容项的唯一标识(此处未实现,可补充文章ID等作为标识)
|
|
|
|
|
def item_guid(self, item):
|
|
|
|
|
return
|
|
|
|
|
return
|