|
|
#gq:
|
|
|
from django.contrib.sitemaps import Sitemap # Django内置站点地图生成类
|
|
|
from django.urls import reverse # URL反向解析
|
|
|
|
|
|
from blog.models import Article, Category, Tag # 导入博客相关模型
|
|
|
|
|
|
class StaticViewSitemap(Sitemap):
|
|
|
"""静态页面站点地图:如首页"""
|
|
|
priority = 0.5 # 页面优先级(0.0-1.0)
|
|
|
changefreq = 'daily' # 内容更新频率
|
|
|
|
|
|
def items(self):
|
|
|
"""返回要包含的静态页面名称列表(对应URL名称)"""
|
|
|
return ['blog:index', ]
|
|
|
|
|
|
def location(self, item):
|
|
|
"""返回每个静态页面的URL"""
|
|
|
return reverse(item)
|
|
|
|
|
|
class ArticleSiteMap(Sitemap):
|
|
|
"""文章页面站点地图"""
|
|
|
changefreq = "monthly" # 文章更新频率
|
|
|
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" # 分类更新频率
|
|
|
priority = "0.6" # 分类页面优先级
|
|
|
|
|
|
def items(self):
|
|
|
"""返回所有分类"""
|
|
|
return Category.objects.all()
|
|
|
|
|
|
def lastmod(self, obj):
|
|
|
"""返回分类的最后修改时间"""
|
|
|
return obj.last_modify_time
|
|
|
|
|
|
class TagSiteMap(Sitemap):
|
|
|
"""标签页面站点地图"""
|
|
|
changefreq = "Weekly" # 标签更新频率
|
|
|
priority = "0.3" # 标签页面优先级(低于文章和分类)
|
|
|
|
|
|
def items(self):
|
|
|
"""返回所有标签"""
|
|
|
return Tag.objects.all()
|
|
|
|
|
|
def lastmod(self, obj):
|
|
|
"""返回标签的最后修改时间"""
|
|
|
return obj.last_modify_time
|
|
|
|
|
|
class UserSiteMap(Sitemap):
|
|
|
"""用户页面站点地图"""
|
|
|
changefreq = "Weekly" # 用户信息更新频率
|
|
|
priority = "0.3" # 用户页面优先级
|
|
|
|
|
|
def items(self):
|
|
|
"""返回所有发布过文章的不重复作者列表"""
|
|
|
return list(set(map(lambda x: x.author, Article.objects.all())))
|
|
|
|
|
|
def lastmod(self, obj):
|
|
|
"""返回用户的注册时间(作为站点地图的最后更新时间)"""
|
|
|
return obj.date_joined |