自定义Django默认的sitemap站点地图样式


Posted in Python onMarch 04, 2020

Django 中自带了 sitemap框架,用来生成 xml 文件

Sitemap(站点地图)是通知搜索引擎页面的地址,页面的重要性,帮助站点得到比较好的收录。 白话文就是:一个写了你网站的所有url的xml文件,告诉搜索引擎,请及时收录我的这些地址。

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:

自定义Django默认的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来生成:

自定义Django默认的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站点地图样式

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

自定义Django默认的sitemap站点地图样式

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

站点地图是出来了,但是和我们平常在一些网站上看到了似乎不太一样,不仅不能点击上面的链接,样式也是很简单的XML结构树。而州的先生博客(https://zmister.com)网站上的站点地图就要美观好看得多:

自定义Django默认的sitemap站点地图样式

如果把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样式文件):

自定义Django默认的sitemap站点地图样式

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

自定义Django默认的sitemap站点地图样式

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

自定义Django默认的sitemap站点地图样式

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

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

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

自定义Django默认的sitemap站点地图样式

是不是比最开始的简陋页面要好多了?源码地址为: https://gitee.com/zmister/MrDoc

总结

到此这篇关于自定义Django默认的sitemap站点地图样式的文章就介绍到这了,更多相关Django Sitemap 站点地图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python中测试访问同一数据的竞争条件的方法
Apr 23 Python
Python写入CSV文件的方法
Jul 08 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
python+pandas分析nginx日志的实例
Apr 28 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
简述 Python 的类和对象
Aug 21 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 #Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 #Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 #Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 #Python
利用Python脚本批量生成SQL语句
Mar 04 #Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 #Python
Python正则表达式学习小例子
Mar 03 #Python
You might like
Mysql的常用命令
2006/10/09 PHP
PHP学习之数组值的操作
2011/04/17 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
小程序实现长按保存图片的方法
2019/12/31 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
拓展训练激励口号
2014/06/17 职场文书
2014年学生工作总结
2014/11/20 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
Golang 实现WebSockets
2022/04/24 Golang