|
|
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 blog.models import Article
|
|
|
from djangoblog.utils import CommonMarkdown
|
|
|
|
|
|
|
|
|
class DjangoBlogFeed(Feed):
|
|
|
"""DjangoBlog的RSS订阅源类"""
|
|
|
|
|
|
# 指定Feed类型为RSS 2.0
|
|
|
feed_type = Rss201rev2Feed
|
|
|
|
|
|
# Feed的描述信息
|
|
|
description = '大巧无工,重剑无锋.'
|
|
|
# Feed的标题
|
|
|
title = "且听风吟 大巧无工,重剑无锋. "
|
|
|
# Feed的链接地址
|
|
|
link = "/feed/"
|
|
|
|
|
|
def author_name(self):
|
|
|
"""获取作者名称 - 返回第一个用户的昵称"""
|
|
|
return get_user_model().objects.first().nickname
|
|
|
|
|
|
def author_link(self):
|
|
|
"""获取作者链接 - 返回第一个用户的绝对URL"""
|
|
|
return get_user_model().objects.first().get_absolute_url()
|
|
|
|
|
|
def items(self):
|
|
|
"""获取要在Feed中显示的项目列表"""
|
|
|
# 返回最近发布的5篇文章,过滤条件:类型为'article'且状态为'published'
|
|
|
return Article.objects.filter(type='a', status='p').order_by('-pub_time')[:5]
|
|
|
|
|
|
def item_title(self, item):
|
|
|
"""获取单个项目的标题"""
|
|
|
return item.title
|
|
|
|
|
|
def item_description(self, item):
|
|
|
"""获取单个项目的描述 - 将Markdown内容转换为HTML"""
|
|
|
return CommonMarkdown.get_markdown(item.body)
|
|
|
|
|
|
def feed_copyright(self):
|
|
|
"""获取Feed的版权信息"""
|
|
|
now = timezone.now()
|
|
|
return "Copyright© {year} 且听风吟".format(year=now.year)
|
|
|
|
|
|
def item_link(self, item):
|
|
|
"""获取单个项目的链接"""
|
|
|
return item.get_absolute_url()
|
|
|
|
|
|
def item_guid(self, item):
|
|
|
"""获取单个项目的全局唯一标识符(当前未实现)"""
|
|
|
# 注意:这个方法目前没有返回值,可能需要根据需求实现
|
|
|
# 通常应该返回一个唯一标识项目的字符串,如文章的ID或永久链接
|
|
|
pass |