dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2195
  • 铜币13840枚
  • 威望6020点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:237回复:0

如何为 django项目添加 sitemap ?

楼主#
更多 发布于:2019-01-22 10:52
Django Sitemap 框架概述

sitemap 站点地图是用来告诉搜索引擎你的网站的更新频率,以及某些页面在你的网站中的重要关系,sitemap有助于搜索引擎加快网站页面的收录

Django sitemap框架通过让你在 Python代码中表达此信息,框架将自动创建此 XML文档。为了创建网站地图,只需编写Sitemap 类,并在 URLconf 中指向该类。

1. 注册 sitemap 应用
# 首先在 settings.py 文件,注册 sitemaps App,例如:
'django.contrib.sitemaps'

2. 创建 sitemaps.py 文件
# 创建一个 sitemaps.py 文件,导入 sitemaps 并定义你的 sitemap 类,例如:
from django.contrib import sitemaps
from django.core.urlresolvers import reverse
from .models import Work, Category

# index
class IndexSiteMap(sitemaps.Sitemap):
    priority = 1.0
    changefreq = 'weekly'

    def items(self):
        return ['web:index']

    def location(self, item):
        return reverse(item)


# detail
class WorkDetailSiteMap(sitemaps.Sitemap):
    priority = 0.7
    changefreq = 'monthly'

    def items(self):
        return Work.objects.all()

    def lastmod(self, obj):
        return obj.modified_time

# 省略...
这里定义了两个 sitemap 类, IndexSiteMap 和 WorkDetailSiteMap
priority 属性表示优先级,值从 0.0(最低) 到 1.0(最高)
changefreq 属性表示更新频率,值包括: always、hourly、daily、weekly、monthly、yearly、never。
items() 方法,返回对象列表。返回的对象将传递给与网站地图属性,配置 location() 方法使用,返回的对象返回绝对路径。
location() 方法,可以提供此方法来指定对象的 URL。默认情况下,location()在每个对象上调用get_absolute_url()  并返回结果。例如返回根 '/'。
lastmod() 方法,应返回 Python datetime对象。例如
<url>
    <loc>http://127.0.0.1:8000/works/5/</loc>
    <lastmod>2018-12-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
</url>

3. 配置 sitemap url
# urls.py 文件
from django.contrib.sitemaps.views import sitemap
from . import sitemaps

app_name = 'web'

sitemaps = {
    'index': sitemaps.IndexSiteMap,
    'detail': sitemaps.WorkDetailSiteMap,
    # 省略...
}

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^works/(?P<pk>\d+)/$', views.WorkDetailView.as_view(), name='detail'),
    url(r'^sitemap\.xml$', sitemap, {'sitemaps':sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    # 省略...
]

4. 验证
# 访问
http://127.0.0.1:8000/sitemap.xml

描述:django-sitemap

图片:django-sitemap.png

django-sitemap



拓展
最后可以提交这个地址给搜索引擎,关于 sitemap 详细信息请参考这篇文章。
如何设置Google Sitemap格式中的优先级和更新频率

参考: Django 添加 sitemap功能
#
欢迎关注微信公众号: 运维录
游客

返回顶部