1. 安装
为使用Sitemap,按照以下步骤安装:
- 在
INSTALLED_APPS
中添加'django.contrib.sitemaps'
。 - 确保
TEMPLATES
设置包含 DjangoTemplates 后端,并将APP_DIRS
选项设置为True
(默认即为True
)。如果曾经修改过这些设置,请进行相应的配置。 - 确保安装了
sites framework
。在INSTALLED_APPS
中添加'django.contrib.sites'
,并设置SITE_ID=1
。然后运行migrate
命令。
2. 示例
以一个 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}) # urls.py from django.contrib.sitemaps import sitemap from myweb.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)
)。
3. 静态视图的 Sitemap
通常,您希望搜索引擎抓取工具索引既不是对象详细信息页面也不是列表页的视图,例如首页。解决方案是在 items
中显式列出这些视图的网址名称,并在网站地图的 location
方法中调用 reverse()
。
# sitemaps.py from django.contrib.sitemaps import Sitemap from django.urls import reverse class StaticViewSitemap(Sitemap): priority = 0.7 changefreq = 'daily' def items(self): return ['index'] def location(self, obj): return reverse('index')
暂无评论内容