Django 配置 sitemap 接口

时间:2021-07-28
本文章向大家介绍Django 配置 sitemap 接口,主要包括Django 配置 sitemap 接口使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

# 环境:  Python-3.7   Django-2.2.7

# 官方文档参考地址:  https://docs.djangoproject.com/zh-hans/2.2/ref/contrib/sitemaps/

# 1.1 settings.py 在  INSTALLED_APPS  中添加以下内容

    'django.contrib.sites',
    'django.contrib.sitemaps',

# 1.2  执行数据库生成代码, 会自动生成 sitemap 的内置表, 登录后台可以看到有一个叫 "站点" 的模块 (下面有截图)

python manage.py makemigrations
python manage.py migrate

# 1.3. settings.py 最下面添加以下参数, 该字段是查询生成的sitemap表里面第一条数据, 如果不加的话会报异常(下面有截图)

SITE_ID = 1

# 2. models.py   

class News(models.Model):

    title = models.CharField(verbose_name="文章标题", max_length=64)
    desc = UEditorField(width=600, height=300, toolbars="full", imagePath="wenzhang/news/desc/",
                           null=True, blank=True, filePath="wenzhang/news/desc/", upload_settings={"imageMaxSize": 1204000},
                           settings={}, verbose_name='文章详情')
    image = models.ImageField(verbose_name="文章封面", upload_to="wenzhang/news", help_text="1920px * 1080px")
    title = models.TextField(verbose_name="title", null=True, blank=True)
    keywords = models.TextField(verbose_name="keywords", null=True, blank=True)
    description = models.TextField(verbose_name="description", null=True, blank=True)
    create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True, blank=True, null=True)

    def get_absolute_url(self):
        """配置每一条文章数据的访问路径
            最终显示在sitemap.xml中 路径是这样的: https://xxx.com/news/1/
        """
        return '/news/%s/' % (self.id, )

    class Meta:
        verbose_name = "a. 文章表"
        verbose_name_plural = verbose_name
        ordering = ['-create_time']

# 3. urls.py

from django.contrib.sitemaps.views import sitemap


urlpatterns = [

    url(r'^news/(\d+)/$', NewsViews.as_view()),
    url('sitemap.xml', sitemap, {'sitemaps': {'news': NewsSitemap, 'index': IndexSitemap}},
        name='django.contrib.sitemaps.views.sitemap'),

]

# 4. views.py

from django.contrib.sitemaps import Sitemap


class NewsSitemap(Sitemap):
    """返回 News 表中查询出来数据的访问路径
        priority参数说明: https://docs.djangoproject.com/zh-hans/2.1/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.priority
        changefreq参数说明: https://docs.djangoproject.com/zh-hans/2.1/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.changefreq
    """
    priority = 0.5
    changefreq = 'daily'

    def items(self):
        """返回 News表对象列表, 可以在此做一些 filter 操作, 过滤掉不需要展示的数据"""
        return News.objects.all()


class IndexSitemap(Sitemap):
    """返回网站首页路径
        该类返回的路径可以自定义, 和上面 NewsSitemap类中不同的是, 没有使用models表
    """

    priority = 0.5
    changefreq = 'daily'

    def items(self):
        return ['index']

    def location(self, obj):
        """直接返回网站首页路径即可, 不需要加域名
            注: 1. 如果未定义 get_absolute_url() 方法时, 需要添加该方法
                2. 因为上面 NewsSitemap 类中, 已经在 News表的 models.py 中添加过 get_absolute_url 方法了,
                   所以不需要加 location 方法
        """
        return '/'

# 5. 访问 /sitemap.xml 路径

原文地址:https://www.cnblogs.com/chaoqi/p/15072131.html