配置站点sitemap.xml文件
💡前情提要
配置网站的sitemap.xml文件
在后面提交推送 获取文章链接
Django有一个高级的Sitemap生成框架
一个Sitemap是一个你的网站的XML文件,它告诉搜索引擎索索引你的页面的更新频率和你的站点某些页面联系到其它页面
有多"重要",这个信息帮助搜索引擎索引你的站点
Django的sitemap框架通过让你用Python代码表达这个信息来自动生成这个XML文件,为了创建一个sitemap,你只需写
一个Sitemap类并在你的URL配置里指向它
配置sitemap到APPS里面
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sitemaps', # 站点 sitemap
'....'
]
配置路由指向
💡项目目录下的urls.py
from django.urls import path, include
from blog.sitemaps import ArticleSitemap
from django.contrib.sitemaps.views import sitemap
# 网站地图
sitemaps = {
'articles': ArticleSitemap,
}
urlpatterns = [
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]
编写sitemap类
💡在子应用中编写sitemap.py文件
from django.contrib.sitemaps import Sitemap
from .models import Article
from .utils import site_protocol
class MySitemap(Sitemap):
protocol = site_protocol()
class ArticleSitemap(MySitemap):
changefreq = 'weekly'
priority = 1.0
def items(self):
return Article.objects.all()
def lastmod(self, obj):
return obj.add_time
💡注意models.py文件
class Article(models.Model):
'''文章'''
'''
文章字段
'''
class Meta:
verbose_name = '文章'
verbose_name_plural = verbose_name
ordering = ('-add_time',) # 以创建时间倒序排列
def get_absolute_url(self):
"""
%s 文章id 看页面是根据什么跳转
"""
return '/article/%s/' % self.id
前端页面添加a标签跳转
<a href="{% url 'django.contrib.sitemaps.views.sitemap' %}" target="_blank">Sitemap</a>
获取站点url
💡
from lxml import etree
import requests
xmlDict = []
r = requests.get("https://qizai.bree.vip/sitemap.xml")
root = etree.fromstring(r.content)
for sitemap in root:
children = sitemap.getchildren()
xmlDict.extend([children[0].text])
for i in xmlDict:
with open('qizai.txt', 'a+') as f:
f.write(i + '\n')