From bce979ce7e77f403b405c8e884ce5cd99d6874eb Mon Sep 17 00:00:00 2001 From: plhw57tbe <2723863608@qq.com> Date: Sun, 19 Oct 2025 23:26:44 +0800 Subject: [PATCH] Update sitemap.py --- src/DjangoBlog-master/djangoblog/sitemap.py | 41 ++++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/DjangoBlog-master/djangoblog/sitemap.py b/src/DjangoBlog-master/djangoblog/sitemap.py index 8b7d446..a02411f 100644 --- a/src/DjangoBlog-master/djangoblog/sitemap.py +++ b/src/DjangoBlog-master/djangoblog/sitemap.py @@ -1,59 +1,88 @@ +# 导入 Django 内置站点地图基类:用于快速实现标准化 sitemap.xml from django.contrib.sitemaps import Sitemap +# 导入 URL 反向解析工具:生成页面的绝对 URL(适配路由命名) from django.urls import reverse +# 导入博客核心模型:用于生成动态内容(文章、分类、标签)的站点地图 from blog.models import Article, Category, Tag +# 静态页面站点地图类:处理无数据库关联的静态页面(如博客首页) class StaticViewSitemap(Sitemap): + # 优先级:0.5(取值 0.0-1.0,值越高搜索引擎越优先抓取,静态页优先级中等) priority = 0.5 + # 更新频率:daily(每天更新,适合内容相对稳定但可能微调的静态页) changefreq = 'daily' + # 定义要包含的静态页面:返回路由名称列表(对应 urls.py 中命名的路由) def items(self): - return ['blog:index', ] + return ['blog:index', ] # 此处仅包含博客首页(路由名为 'blog:index') + # 生成静态页面的 URL:通过路由名称反向解析为绝对路径 def location(self, item): - return reverse(item) + return reverse(item) # item 为 items() 返回的路由名称,如 'blog:index' +# 文章站点地图类:处理博客文章的动态页面(核心内容,SEO 关键) class ArticleSiteMap(Sitemap): + # 更新频率:monthly(每月更新,适合文章发布后较少修改的场景) changefreq = "monthly" + # 优先级:0.6(高于静态页和分类/标签,文章是站点核心内容,优先抓取) priority = "0.6" + # 定义要包含的文章:仅筛选“已发布”状态的文章(排除草稿、私有文章) def items(self): return Article.objects.filter(status='p') + # 文章最后更新时间:用于搜索引擎判断内容是否更新,提升抓取效率 def lastmod(self, obj): - return obj.last_modify_time + return obj.last_modify_time # 引用文章模型的“最后修改时间”字段 +# 分类站点地图类:处理文章分类页面(聚合类内容,辅助 SEO) class CategorySiteMap(Sitemap): + # 更新频率:Weekly(每周更新,分类内容更新频率低于文章) changefreq = "Weekly" + # 优先级:0.6(与文章同级,分类页是重要的内容聚合入口) priority = "0.6" + # 定义要包含的分类:获取所有分类(无论是否有文章,确保分类页被收录) def items(self): return Category.objects.all() + # 分类最后更新时间:判断分类下内容是否有变化(如新增/修改文章) def lastmod(self, obj): - return obj.last_modify_time + return obj.last_modify_time # 引用分类模型的“最后修改时间”字段 +# 标签站点地图类:处理文章标签页面(细分内容聚合,补充 SEO 覆盖) class TagSiteMap(Sitemap): + # 更新频率:Weekly(每周更新,标签内容更新频率与分类一致) changefreq = "Weekly" + # 优先级:0.3(低于文章和分类,标签页是辅助导航入口,优先级较低) priority = "0.3" + # 定义要包含的标签:获取所有标签(确保所有标签页被搜索引擎收录) def items(self): return Tag.objects.all() + # 标签最后更新时间:判断标签下内容是否有变化 def lastmod(self, obj): - return obj.last_modify_time + return obj.last_modify_time # 引用标签模型的“最后修改时间”字段 +# 用户站点地图类:处理文章作者页面(展示用户发布的所有文章,提升作者页曝光) class UserSiteMap(Sitemap): + # 更新频率:Weekly(每周更新,用户发布文章频率通常较低) changefreq = "Weekly" + # 优先级:0.3(与标签同级,作者页是辅助内容入口) priority = "0.3" + # 定义要包含的用户:获取所有发布过文章的作者(去重,避免重复收录同一用户) def items(self): + # 1. 从所有文章中提取作者字段 → 2. 转集合去重 → 3. 转列表返回 return list(set(map(lambda x: x.author, Article.objects.all()))) + # 用户页面最后更新时间:用用户“注册时间”替代(简化逻辑,也可改为用户最新文章发布时间) def lastmod(self, obj): - return obj.date_joined + return obj.date_joined # 引用用户模型的“注册时间”字段 \ No newline at end of file