关键词

Django Sitemap 站点地图的实现方法

实现网站地图是提高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以指定我们要渲染哪个模板。

本文链接:http://task.lmcjl.com/news/15659.html

展开阅读全文