实现网站地图是提高SEO的一种有效方法,而Django Sitemaps可以帮助我们快速实现。
以下是实现Django Sitemap站点地图的步骤:
Step 1: 创建Sitemap子类
我们需要创建一个Sitemap子类,以便将模型与URL关联起来。例如,假设我们在网站上有一个名为Article的模型;那我们需要创建一个ArticleSitemap,并告诉Django如何连接其URL。我们需要做的是从django.contrib.sitemaps.Sitemap类中创建一个新的类,并重写changefreq属性。
from django.contrib.sitemaps import Sitemap
from .models import Article
class ArticleSitemap(Sitemap):
changefreq = 'weekly'
def items(self):
return Article.objects.all()
def lastmod(self, obj):
return obj.pub_date
我们重写changefreq属性,并将其设置为“weekly”。请注意,这是频繁修改模型的频率,常用的有always, hourly, daily, weekly, monthly, yearly, never等。请根据实际需要选择合适的选项。
在这个类中,我们还需要实现items()和lastmod()方法。
- items()方法返回要包含在站点地图中的模型对象的列表。
- lastmod(obj)方法返回obj发布的日期。
Step 2: 添加Sitemap URL
接下来,我们需要在URLConf中添加这些Sitemap子类。在这里,我们可以使用django.contrib.sitemaps.views.sitemap视图来渲染所有Sitemap类。
from django.urls import path
from django.contrib.sitemaps.views import sitemap
from .sitemaps import ArticleSitemap
sitemaps = {
'articles': ArticleSitemap,
}
urlpatterns = [
path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap')
]
在这个示例中,我们创建了一个名为“articles”的sitemaps字典,该字典包含我们在第一步中创建的ArticleSitemap。我们还定义了一个名为sitemap.xml的路径,这是默认的Sitemap路径,它会将所有Sitemap视图作为输入,然后输出SiteMap的XML。
实现该url需要注意引入django.contrib.sitemaps.views.sitemap
方法。
示例
我们现在可以为我们的博客添加Sitemap了,以下示例是如何为我们的blog添加Sitemap。
Model
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=255)
author = models.CharField(max_length=255)
pub_date = models.DateField()
content = models.TextField()
Sitemap
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from .models import Article
class ArticleSitemap(Sitemap):
changefreq = "weekly"
priority = 0.9
def items(self):
return Article.objects.all()
def location(self, obj):
return reverse('article_detail', args=[obj.pk])
在这个示例中,我们从ArticleSitemap开始。我们设置了changefreq(这是 ArticleSitemap中的一个属性)以每周更新,并且priority(这是Sitemap中的另一个属性)以0.9。
对于items()函数,我们只是返回Article.objects.all()。如果你有很多Article对象,这个函数返回一个很长的Python列表。
在location函数中,我们定义了如何生成URL。在本例中,我们使用reverse()函数来可靠地创建每个给定Article分享的URL。
URLConf
from django.urls import path
from django.contrib.sitemaps.views import sitemap
from .sitemaps import ArticleSitemap
sitemaps = {
'articles': ArticleSitemap,
}
view_args = {'sitemaps': sitemaps, 'template_name': 'blog/sitemap.xml'}
urlpatterns = [
path('sitemap.xml', sitemap, view_args),
#...
]
对于Sitemap配置文件,我们在sitemaps字典中添加了ArticleSitemap作为“articles”Sitemap。然后,我们用
from django.contrib.sitemaps.views import sitemap
来引入Django内置的sitemap()
Django sitemap视图函数。
由于我们自己的视图视图配置所在的位置可能不同于Django内置的sitemaps视图,django.contrib.sitemaps.views.sitemap
接受一个额外的实参sitemaps
。最后,我们为template_name传递blog/sitemap.xml
以指定我们要渲染哪个模板。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django Sitemap 站点地图的实现方法 - Python技术站