自定义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中的hashlib和base64加密模块使用实例
Sep 02 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
python实现海螺图片的方法示例
May 12 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
Python文件操作基础流程解析
Mar 19 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 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
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
PHP递归算法的简单实例
2019/02/28 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
jQuery上传插件webupload使用方法
2017/08/01 jQuery
JS实现瀑布流布局
2017/10/21 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python的条件语句与运算符优先级详解
2015/10/13 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
python图片合成的示例
2020/11/09 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
传媒专业推荐信范文
2013/11/23 职场文书
七匹狼男装广告词
2014/03/21 职场文书
2015年校长新年寄语
2014/12/08 职场文书
围城读书笔记
2015/06/26 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python