如何配置Django的动态站点地图?

用Django写了一个Blog,这其中必然少不了站点地图,这站点地图对于一个网站有多重要我就不说了。

settings.py配置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sitemaps', # sitemap
]

模型配置

sitemap有些属性必不可少。

class content(models.Model):
    # 下面的时间需要,也可以不配置
    pub_time = models.DateTimeField(auto_now_add=True)
    # 这个也要
    def get_absolute_url(self):
        """ sitemap地图 这里返回该文章对象的绝对url地址 这里根据你自己的url来确定 """
        return "/content/{}".format(self.pk)

sitemaps.py配置

该文件在项目的application下面创建

# sitemaps.py
from django.contrib.sitemaps import Sitemap
from .models import content


class contentSitemap(Sitemap):
    protocol = "https"  # 协议 可选 "http" or "https"
    priority = 0.5  # 权重
    changefreq = 'daily'  # 频率

    def items(self):  # 返回对象的列表.这些对象将被其他方法或属性调用
        return content.objects.all()

    def lastmod(self, obj):  # 可选,该方法返回一个datetime,表示每个对象的最后修改时间
        # 这里和模型中的pub_time对于,如果不需要要也可以直接设定值
        return obj.pub_time

    def location(self, obj):  # 可选.返回每个对象的绝对路径.如果对象有get_absolute_url()方法,可以省略location
        return "/content/{}".format(obj.id)

url路由配置

from .sitemaps import contentSitemap
from django.conf.urls import url

# 这里还可以添加分类页,标签页,静态页面等,这里只演示文章详情页
sitemaps = {
    'article': contentSitemap
}

urlpatterns = [
    url(r'^sitemap.xml/$',sitemap, {'sitemaps': sitemaps}, name='sitemap'),  # 网站地图
]

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *