安装 Django Sitemap APP 的步骤:
- 在
INSTALLED_APPS
设置中添加'django.contrib.sitemaps'
。 - 确认
TEMPLATES
设置中包含 DjangoTemplates 后端,并将APP_DIRS
选项设置为True
。如果未修改过这些设置,使用默认值即可。 - 确认已安装 sites framework。在
INSTALLED_APPS
中添加'django.contrib.sites'
,并添加设置SITE_ID=1
。运行migrate
完成设置。
示例子:
假设有一个 News 模型,并希望 Sitemap 包含指向所有新闻条目的链接
# sitemaps.py from django.contrib.sitemaps import Sitemap from myweb.models import News from django.urls import reverse class NewsSitemap(Sitemap): changefreq = 'daily' # 可选,指定每个对象的更新频率 priority = 0.6 # 可选,指定每个对象的优先级,默认0.5 def items(self): # 返回对象的列表.这些对象将被其他方法或属性调用 return News.objects.all() def lastmod(self, obj): # 可选,该方法返回一个datetime,表示每个对象的最后修改时间 return obj.pub_time def location(self, obj):#可选.返回每个对象的绝对路径.如果对象有get_absolute_url()方法,可以省略location return reverse('new', kwargs={'new_id': obj.id}) # url.py from django.contrib.sitemaps import sitemap # 导入sitemap视图 from xxx.sitemaps import NewsSitemap sitemaps = { 'new': NewsSitemap, } urlpatterns = [ ... url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'), ]
当客户端访问 /sitemap.xml
时,Django 将生成一个 Sitemap。
Sitemap 视图需要一个额外的必需参数: {'sitemaps': sitemaps}
。sitemaps
是一个字典,将小节的标签(例如:new
或 blog
)映射到 Sitemap 类(例如:NewsSitemap
)。也可以映射到 Sitemap 类的实例(例如:NewsSitemap(some_var)
)。
静态视图的 Sitemap:
通常,希望搜索引擎抓取工具索引既不是对象详细信息页面也不是列表页的视图(例如 index
页面)。解决方案是在 items
中显式列出这些视图的网址名称,并在网站地图的 location
方法中调用 reverse()
。
from django.contrib.sitemaps import Sitemap from django.urls import reverse class StaticViewSitmap(Sitemap): priority = 0.7 changefreq = 'daily' def items(self): return ['index'] def location(self, obj): return reverse('index')
暂无评论内容