You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
"""
DjangoBlog 站点地图配置模块
功能:为搜索引擎提供网站结构地图,支持文章、分类、标签等内容的自动索引
"""
from django . contrib . sitemaps import Sitemap
from django . urls import reverse
from blog . models import Article , Category , Tag
class StaticViewSitemap ( Sitemap ) :
"""
静态页面站点地图
用于生成固定页面的站点地图,如首页等
"""
# 优先级: 0.5( 中等优先级, 首页等重要页面可以设为1.0)
priority = 0.5
# 更新频率:每天检查
changefreq = ' daily '
def items ( self ) :
"""
返回包含在站点地图中的静态页面名称
这些名称需要与 urls.py 中的 URL 名称对应
"""
return [ ' blog:index ' , ] # 博客首页
def location ( self , item ) :
"""
根据页面名称生成完整的 URL 地址
"""
return reverse ( item )
class ArticleSiteMap ( Sitemap ) :
"""
文章站点地图
自动生成所有已发布文章的站点地图
"""
# 更新频率:每月检查(文章内容相对稳定)
changefreq = " monthly "
# 优先级: 0.6(文章是核心内容,优先级较高)
priority = " 0.6 "
def items ( self ) :
"""
返回所有已发布的文章对象
status= ' p ' 表示已发布状态
"""
return Article . objects . filter ( status = ' p ' )
def lastmod ( self , obj ) :
"""
返回文章的最后修改时间
帮助搜索引擎了解内容更新情况
"""
return obj . last_modify_time
class CategorySiteMap ( Sitemap ) :
"""
分类站点地图
生成文章分类页面的站点地图
"""
# 更新频率:每周检查(分类结构相对稳定)
changefreq = " Weekly "
# 优先级: 0.6(分类页面重要程度较高)
priority = " 0.6 "
def items ( self ) :
"""
返回所有分类对象
"""
return Category . objects . all ( )
def lastmod ( self , obj ) :
"""
返回分类的最后修改时间
当分类下的文章更新时,分类页面也需要更新
"""
return obj . last_modify_time
class TagSiteMap ( Sitemap ) :
"""
标签站点地图
生成标签页面的站点地图
"""
# 更新频率:每周检查
changefreq = " Weekly "
# 优先级: 0.3(标签页面重要性相对较低)
priority = " 0.3 "
def items ( self ) :
"""
返回所有标签对象
"""
return Tag . objects . all ( )
def lastmod ( self , obj ) :
"""
返回标签的最后修改时间
当标签关联的文章更新时,标签页面也需要更新
"""
return obj . last_modify_time
class UserSiteMap ( Sitemap ) :
"""
用户站点地图
生成用户主页的站点地图
"""
# 更新频率:每周检查
changefreq = " Weekly "
# 优先级: 0.3(用户页面重要性相对较低)
priority = " 0.3 "
def items ( self ) :
"""
返回所有发表过文章的用户(作者)
使用 set 去重,确保每个用户只出现一次
"""
return list ( set ( map ( lambda x : x . author , Article . objects . all ( ) ) ) )
def lastmod ( self , obj ) :
"""
返回用户的注册时间
这里使用用户注册时间作为最后修改时间
实际可以根据用户最后活动时间优化
"""
return obj . date_joined