专栏首页州的先生如何更好地美化Django网站的Sitemap站点地图?

如何更好地美化Django网站的Sitemap站点地图?

一、站点地图sitemap

一般在Web网站开发完成之际,如果对搜索引擎优化(SEO)有一定的要求,我们都会为网站添加一个站点地图sitemap,配合robot.txt的使用,以汇总和索引网站上所有允许被搜索引擎搜索、采集和索引的网页,这样搜索引擎可以根据站点地图快速地爬取到一个网站上的所有希望被收录的网址。

在Django框架中,有一个自带且基本完整的sitemap框架供我们使用。通过Django提供的sitemap,我们可以很快实现是个站点地图的功能。

二、使用Django的sitemap功能

Django自带的sitemap使用起来非常简单,总结起来就是3步:创建、添加、引入

下面,我们以MrDoc中的使用为例。

第一步,新建一个在应用文件夹下新建一个名为sitemap.py的文件(在MrDoc中的路径为/MrDoc/app_doc/sitemap.py),根据实际站点的需求,我们准备将首页、公开的文集和已发布的文档,放到sitemap中,所以我们要写实例化几个Sitemap类,先来引入它:

# MrDoc Sitemap.py
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from app_doc.models import Doc,Project

定义一个继承自SiteMap的类,用来生成首页的sitemap:

接着定义一个文档的sitemap:

# 文档地图
class DocSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.8

    def __init__(self,pro):
        self.pro = pro

    def items(self):
        return Doc.objects.filter(status=1,top_doc=self.pro)

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

文集的sitemap,我们通过调用文档的sitemap来生成:

在sitemap.py文件中的操作就完成了,我们移步到Django项目的顶级URL路由文件urls.py中(在MrDoc中的路径为/MrDoc/MrDoc/urls.py),进行第二步。

引入相关的模块:

from django.contrib.sitemaps import views
from app_doc.sitemaps import all_sitemaps as sitemaps

然后在urlpatterns中添加两个URL的匹配路径:

path('sitemap.xml', views.index, {'sitemaps': sitemaps},name='sitemap',), # 站点地图索引
path('sitemap-<section>.xml', views.sitemap, {'sitemaps': sitemaps}, # 站点地图
     name='django.contrib.sitemaps.views.sitemap')

最后一步,我们在setting.py文件中(在MrDoc中的路径为/MrDoc/MrDoc/settings.py)的应用列表INSTALLED_APPS中将sitemap的功能应用添加进去:

这样,为Django创建的网站添加sitemap站点地图功能就已经完成了。我们运行服务,访问127.0.0.1/sitemap.xml就可以看到站点地图:

这就是Django自带的sitemap的样子了。

站点地图是出来了,但是和我们平常在一些网站上看到了似乎不太一样,不仅不能点击上面的链接,样式也是很简单的XML结构树。

而州的先生博客(https://zmister.com)网站上的站点地图就要美观好看得多,如下图所示:

如何把Django自带的sitemap站点地图美化一下呢?我们可以借助Django提供的自定义sitemap模板功能。

三、自定义sitemap模板

在Django中,sitemap的样式存在于\django\contrib\sitemaps\templates\文件夹下,一共有两个XML模板文件:

  • sitemap.xml
  • sitemap-index.xml

我们需要做的就是新建两个xml文件,在上述两个文件的基础之上,引入XML的样式文件,让XML样式文件对XML文件进行渲染,以实现美化sitemap站点地图的功能。

我们首先从州的先生博客(https://zmister.com)上把站点地图的样式文件复制到MrDoc的静态文件目录中(也可以使用其他的XML样式文件):

然后在模板目录template文件下新建了两个同名的XML文件:

在原本的sitemap模板文件内容中添加一行xml-stylesheet标签代码,用于指示XML样式文件的路径:

最后,修改urls.py文件,使用template_name键指定自定义sitemap模板的名称:

path('sitemap.xml', views.index, {'sitemaps': sitemaps,'template_name':'sitemap/sitemap-index.xml'},name='sitemap',), # 站点地图索引
path('sitemap-<section>.xml', views.sitemap, {'sitemaps': sitemaps,'template_name':'sitemap/sitemap.xml'}, # 站点地图
     name='django.contrib.sitemaps.views.sitemap')

这样,我们的sitemap站点地图就是有样式渲染的页面了,如下图所示:

是不是比最开始的简陋页面要好多了?简单的3步就实现了对Django自带Sitemap站点地图的美化工作。

本文分享自微信公众号 - 州的先生(zmister2016),作者:州的先生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • app逆向入门分析——破解某APP登陆请求参数

    前段时间做爬虫遇到一个app,里面的数据需要登录之后才能拿到,而且登录不能用密码,只能通过验证码登录。 这不是明摆着欺负人么,按赵四哥那句话来说就是:

    州的先生
  • 如何用Python设计一个全链路的舆情监控系统?

    舆情监控系统在过去几年曾是一个比较热门的话题,一般多被应用在政务领域、企业领域等,用于让企业、部门等单位及时获取和了解到网络上舆情的出现和发展,以便及时采取相应...

    州的先生
  • 9个动图带你进入PyQtGraph的强大可视化世界

    PyQtGraph是一个建立在PyQt/PySide之上的Python数据可视化图形界面库,其性能强、速度快,能够胜任大部分交互式的2D、3D图形绘制,可以搞定...

    州的先生
  • 手动生成sitemap

    本来google的插件是很好用的,但无奈我的wordpress主题好像有问题,安装Google XML Sitemaps后,访问sitemap.xml页面会报错...

    尾尾部落
  • NodeJs生成sitemap站点地图

    如果博客是使用Hexo管理的,sitemap可以使用插件来生成。但对于一个内容管理网站,后端可能是express、koa之类的框架,这时sitemap就需要自己...

    JouyPub
  • Php-Laravel输入站点地图(sitemap)

    站点地图可以帮助搜索引擎更好的收录我们的站点,所以我们建站、建博客都最好有站点地图。

    无道
  • 米扑科技的开源项目:sitemap-php 自动生成网站地图

    米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml)

    阳光岛主
  • 蓝桥杯 试题 算法训练 加法运算

    你的表妹正在学习整数的加法,请编写一个程序来帮助她学习。该程序调用了一个函数GetTwoInts,由它来返回两个从键盘读入的100以内的整数,然后计算这两个整数...

    用户7727433
  • 云之家获A+轮融资 官网启用三拼域名

    12月29日消息,中国移动办公服务商“云之家”对外宣布已获得A+轮融资,投资方为容韬资本。云之家表示,此轮融资完成后将继续加强产品研发与渠道建设力度...

    躲在树上的域小名
  • 爬虫入门:网络请求分析

    摘要:看到有不少爬虫新手都是一头扎进代码里,一通乱弄,最后,跑通从大佬那里拿到的代码,嘿嘿嘿,抓到了数据结果,然后就没有然后,后面一出问题就又一脸懵逼,恢复到”...

    马哥Python

扫码关注云+社区

领取腾讯云代金券