如何使用 django.contrib.sitemaps 快速生成网站地图

sitemaps 是 Google 最先引入的网站地图协议,采用 XML 格式,它的作用简而言之就是优化搜索引擎的索引效率,详细的解释可以参考 维基百科。

Bing、Yahoo 以及 Ask 都支持 sitemaps 协议。国内的百度最近也开始支持 sitemaps 协议,但我看百度官方文档的描述, 标签可能只支持精确到天 yyyy-mm-dd(制作通用的 sitemaps 协议可能需要注意这点,标准 sitemaps 协议支持非常精确的 W3C Datetime 格式)。

Django sitemap 框架

Django 的 contrib 包带了对网站地图协议的支持,使用起来非常方便,几行代码就可以搞定了。

首先需要在 settings.py 的 INSTALLED_APPS 列表中增加 app ‘django.contrib.sitemaps’。

随后在 urls.py 文件中追加如下代码:

# django.contrib.sitemaps
from django.contrib.sitemaps import GenericSitemap
from blogs.models import Blog
from news.models import News

blogs_dict = {
‘queryset’: Blog.objects.all(),
‘date_field’: ‘modified_date’,
}
news_dict = {
‘queryset’: News.objects.all(),
‘date_field’: ‘modified_date’,
}

sitemaps = {
# ‘flatpages’: FlatPageSitemap,
‘blogs’: GenericSitemap(blogs_dict, priority=0.6),
‘news’: GenericSitemap(news_dict, priority=0.5),
}

urlpatterns += patterns(‘django.contrib.sitemaps.views’,
(r’^sitemap\.xml$’, ‘index’, {‘sitemaps’: sitemaps}),
(r’^sitemap-(?P

.+)\.xml$’, ‘sitemap’, {‘sitemaps’: sitemaps}),
)
Blog 和 News 换成需要为其建立地图的 Model 即可,其中 ‘date_field’ 对应于网站地图协议的lastmod(最后修改时间),所以值 modified_date 要换成对应 Model 用来保存最后修改时间的数据库字段。

anyShare分享到: