概述
站点地图是您网站上的一个XML文件,它告诉搜索引擎索引器您的网页更改频率以及某些网页与您网站上其他网页相关的“重要”程度。此信息有助于搜索引擎索引您的网站。 Django站点地图框架允许您在Python代码中表达此信息,从而自动创建此XML文件。 它的工作方式与Django的联合框架非常相似。要创建站点地图,只需编写一个 Sitemap类并在URLconf中指向它 。
安装
要安装站点地图应用,请按以下步骤操作:
1. 添加django.contrib.sitemaps
到您的INSTALLED_APPS
设置。
2. 确保您的TEMPLATES
设置包含DjangoTemplates
其APP_DIRS
选项设置为的后端True
。它默认存在,所以如果你改变了那个设置,你只需要改变它。
3. 确保你已经安装了 。sites framework
注意:站点地图应用程序不安装任何数据库表。它需要进入的唯一原因INSTALLED_APPS是 Loader()模板加载器可以找到默认模板。
示例
sitemaps.py
from django.contrib.sitemaps import Sitemap
from myblog.models import Blog, Tag, Category
from django.urls import reverse
class NewsSitemap(Sitemap):
changefreq = 'daily' # 可选,指定每个对象的更新频率
priority = 0.6 # 可选,指定每个对象的优先级,默认0.5
def items(self): # 返回对象的列表.这些对象将被其他方法或属性调用
return Blog.objects.all()
def lastmod(self, obj): # 可选,该方法返回一个datetime,表示每个对象的最后修改时间
return obj.modify_time
def location(self, obj): # 可选.返回每个对象的绝对路径.如果对象有get_absolute_url()方法,可以省略location
return reverse('blog_id', kwargs={'blog_id': obj.id})
class TagNameSitemap(Sitemap):
changefreq = 'daily' # 可选,指定每个对象的更新频率
priority = 0.6 # 可选,指定每个对象的优先级,默认0.5
def items(self):
return Tag.objects.all()
def location(self, obj):
return reverse('tag_name', kwargs={'tag_name': obj.name})
class CategoryNameSitemap(Sitemap):
changefreq = 'daily' # 可选,指定每个对象的更新频率
priority = 0.6 # 可选,指定每个对象的优先级,默认0.5
def items(self):
return Category.objects.all()
def location(self, obj):
return reverse('category_name', kwargs={'category_name': obj.name})
url.py
from django.contrib.sitemaps import sitemap # 导入sitemap视图
from myblog.sitemaps import NewsSitemap, TagNameSitemap, CategoryNameSitemap
from django.contrib.sitemaps import views as sitemaps_views
from django.views.decorators.cache import cache_page
sitemaps = {
'new': NewsSitemap,
'tags': TagNameSitemap,
'categorys': CategoryNameSitemap
}
urlpatterns = [
···
# 创建引用单个站点地图文件的站点地图索引,每个站点在您的sitemaps词典中定义一个
# 这将自动生成一个sitemap.xml引用两者sitemap-new.xml、sitemap-tags.xml和sitemap-categorys.xml文件。本 Sitemap类和sitemaps 字典都没有改变。
path('sitemap.xml',
cache_page(86400)(sitemaps_views.index), # 分页显示
{'sitemaps': sitemaps, 'sitemap_url_name': 'sitemaps'}),
path('sitemap-<section>.xml',
cache_page(86400)(sitemaps_views.sitemap),
{'sitemaps': sitemaps}, name='sitemaps'),
]
当客户端访问 /sitemap.xml时,这将告诉Django生成一个Sitemap.
sitemap视图需要一个额外的必需参数:{sitemaps: sitemaps}
.sitemaps
是一个字典,将小节的标签(例如:new
或blog
)映射到Sitemap类(例如:NewsSitemap
).它也可以映射到Sitemap类的实例(例如: NewsSitemap(some_var)
).
发表评论
共 0 条评论
暂无评论