Django设置网站地图(Sitemap)

图片[1]-Django设置网站地图(Sitemap)-山海云端论坛

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')

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容