• 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 路径

  • 相关阅读:
    重温.NET Remoting(四)
    asp.net mvc3的变态错误
    绝对定位与相对低位的应用
    Tsql script for Job
    Entlib5.0之数据查询
    Jquery Mobile dialog的生命周期
    关于委托Lamda表达式等的一个小例子
    网上摘录 数据分组处理
    Oracle 要点摘录
    [原創]另一種思路固定URL及.NET實現
  • 原文地址:https://www.cnblogs.com/chaoqi/p/15072131.html
Copyright © 2020-2023  润新知