Django站点Sitemap生成及修改默认域名信息

Sitemap是为了方便搜索引擎识别网站上有哪些内容可供抓取的一个网页。最简单的的sitemap形式是XML文件,文件中会包含诸如网站上指定内容的网址以及其他相关的元数据(比如上次更新时间、内容更改的频率以及对应内容在网站自身的权重等等),这些可以方便搜索引擎更为智能地、有目的性地抓取我们网站的内容。

那么这个sitemap是怎么来的呢?如何为自己的网站添加sitemap呢?兄弟们别慌,对于Django这种非常成熟框架来说,很显然,这种功能肯定是内置的啦,是不是很开心?反正对我这种小白来说是很开心的,下面我们就来看看(我这种小白是如何被虐的)如何使用Django的内置sitemap。

安装

看到官方文档sitemap页面前几行的时候我就笑了,感觉so easy,妈妈再也不用担心我的站点没有sitemap了。

跟django的其他应用一毛一样,sitemap安装非常简单,咱们跟着官方文档来哈:

  1. 到settings.py文件中去添加'django.contrib.sitemaps'到INSTALLED_APPS;

  2. 确认一下在setting.py中的TEMPLATES下的APP_DIRS是否为True(已知Django 2.1是默认为True的);

  3. 确认一下已经安装了sites framework。看到这里不禁扶额,这是啥?我是谁?我在哪?……只能顺手挤按了一下睛明穴,不慌不慌,我们点进去看看这是个啥:

官方文档:Django comes with an optional “sites” framework. It’s a hook for associating objects and functionality to particular websites, and it’s a holding place for the domain names and “verbose” names of your Django-powered sites.

我的理解:这玩意是个钩子,连接objects和functionality的钩子;同时又是网站域名信息的存放地;大概就是这样吧;

既然sitemap需要这玩意,那就装吧,找到sites framework的Enabling the site framework,嘿嘿嘿,也非常简单,三步走战略:

  1. 添加'django.contrib.sites'到 INSTALLED_APPS(基本操作嘛);

  2. 在setting.py中设置SITE_ID: SITE_ID = 1;

  3. Run migrate;(这里埋了个小坑,因为在migrate以后django.contrib.sites通过post_migrate创建并存储的网站的域名是example.com,而官方文档给出的如果想要设置正确的域名信息的话请用data migration,这里先按下不表,因为我当时就是这样没管它……)

好,通过以上三步,成功enable了site framework,那么前面说的sitemap安装的那三步也刚好完成了, Exciting!接下来就是设置sitemap的访问地址了(都这个套路嘛对吧)。

配置URL

我前前后后仔细阅读了两遍官方文档的介绍sitemap内容,发现django在这方面给出的可定制化内容还是挺多的,但是像我这种小白,或者说是对于简单的站点来说,其实没必要整的太复杂,请直接拿最简单的方式砸我脸上,是的,良心django再次提供了shortcuts——class GenericSitemap:

比如说你想把blog的所有Post列入到sitemap中以方便搜索引擎匹配,那么在urls.py中增加如下内容:

from django.contrib.sitemaps import GenericSitemap
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from blog.models import Post

info_dict = {
    'queryset': Post.objects.all(),
    'date_field': 'pub_date',}

Sitemaps = {'blog': GenericSitemap(info_dict, priority=0.6)}

urlpatterns = [
     # the sitemap
     path('sitemap.xml', sitemap,
        {'sitemaps': sitemaps},
        name='django.contrib.sitemaps.views.sitemap'),]

这时候访问你的域名/sitemap.xml即可看到django为你生成的sitemap文件了。也正是在这个时候前面埋的那个小坑出现了,你会发现sitemap中的域名怎么都成了example.com呢(在搜索该问题过程中发现有的同学会是localhost.com,可能是django版本不同吧)。这样的sitemap有个卵用哦……

没办法,我就回到site framework那里,硬着头皮再去看如何用data migration来设置正确的域名信息,因为官方文档就是这么说的:

django.contrib.sites registers a post_migrate signal handler which creates a default site named example.com with the domain example.com. This site will also be created after Django creates the test database. To set the correct name and domain for your project, you can use a data migration.

结果看了半天,data migration的基本内容是明白了,但是还是没搞懂怎么通过它来设置域名信息(是小白没错了)。

于是放弃了,直接祭出Google大法,搜了一通发现原来如此,原来如此啊……

其实说白了,之所以生成的sitemap里的域名为example.com就是因为数据库里就是这个保存的,而这又是因为site framework那一步migrate在初始化的时候就是这么给数据库传递的默认值。既然想改这个值,无非就是去数据库里改数据罢了,那么改数据库内容最简单的方法是啥呢?当然是admin页面啦。想到这里,我直接访问/admin页面,登陆超级用户后发现,阿西吧,连自己去把对应内容注册到admin都省了,人家直接给你admin里已经默认显示在那了,跟默认的那个“用户USER”和“组GROUP”一样。

admin页面的站点修改界面

你要做的只是点开修改,把example.com改成你自己的域名即可。然后你再去看/sitemap.xml生成的已经是你要的域名了。

P.S. 我这里admin是中文界面是因为在settings.py中把language改成“zh_hans”了

至此,简单的Django sitemap生成就完成了,剩下的就是把你的sitemap提交给Google大大和Baidu小小了。这里说的只是比较简单的方法,如果你想实现一些复杂的sitemap,还是建议去啃一遍官方文档,虽然啃的慢,但是啃完了才会发现,真香!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容