Update feeds.py

pull/10/head
plhw57tbe 4 months ago
parent f526a8d64a
commit 0d0fb564d6

@ -1,40 +1,61 @@
# 导入 Django 用户模型工具:获取当前项目的用户模型(支持自定义用户模型)
from django.contrib.auth import get_user_model
# 导入 Django 内置的 Feed 基类:用于快速实现 RSS/Atom 订阅功能
from django.contrib.syndication.views import Feed
# 导入 Django 时间工具:处理时区和当前时间
from django.utils import timezone
# 导入 RSS 2.0 格式生成器:指定 Feed 输出格式为 RSS 2.0 标准
from django.utils.feedgenerator import Rss201rev2Feed
# 导入博客核心模型和工具:关联文章数据及 Markdown 解析
from blog.models import Article
from djangoblog.utils import CommonMarkdown
from djangoblog.utils import CommonMarkdown # 自定义 Markdown 解析工具(将文章内容转为 HTML
# 自定义 RSS Feed 类:继承 Django 内置 Feed 类,实现博客文章的订阅功能
class DjangoBlogFeed(Feed):
# 指定 Feed 生成器类型:使用 RSS 2.0 标准格式(最常用的 RSS 版本)
feed_type = Rss201rev2Feed
# Feed 描述信息:显示在订阅源的说明中
description = '大巧无工,重剑无锋.'
# Feed 标题:订阅源的名称(通常为博客名称)
title = "且听风吟 大巧无工,重剑无锋. "
# Feed 的链接:订阅源自身的 URL通常指向博客首页或 Feed 专属页面)
link = "/feed/"
# 订阅源作者名称:从系统第一个用户的昵称获取(适合个人博客)
def author_name(self):
return get_user_model().objects.first().nickname
# 订阅源作者链接:指向作者的个人页面(通过用户模型的 get_absolute_url 方法获取)
def author_link(self):
return get_user_model().objects.first().get_absolute_url()
# 订阅源包含的项目(文章):定义要展示在 Feed 中的内容
def items(self):
# 筛选条件类型为文章type='a'、状态为已发布status='p'
# 排序规则:按发布时间倒序(最新发布的文章在前)
# 数量限制:只显示最新的 5 篇文章
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)
return CommonMarkdown.get_markdown(item.body) # 调用工具类解析 Markdown
# 订阅源的版权信息:动态生成包含当前年份的版权声明
def feed_copyright(self):
now = timezone.now()
return "Copyright© {year} 且听风吟".format(year=now.year)
now = timezone.now() # 获取当前时间(带时区)
return "Copyright© {year} 且听风吟".format(year=now.year) # 格式化版权信息
# 单个项目(文章)的链接:指向文章详情页(通过文章模型的 get_absolute_url 方法获取)
def item_link(self, item):
return item.get_absolute_url()
# 单个项目文章的唯一标识GUID此处留空Django 会默认使用 item_link 作为 GUID
def item_guid(self, item):
return
return
Loading…
Cancel
Save