当前位置: 首页 > 后台 > Django

如何为Django项目添加站点地图

作者: admin 2019-09-23 15:36:39 阅读(195) 评论(0)

前言

众所周知,为网站加入站点地图 sitemap,可以节省站长主动向百度必应等搜索引擎提交收录网址的时间和精力。搜索引擎会分析站点地图中的内容,然后进行合理地抓取。

Django自带了站点地图功能,默认情况下是不开启的,我们只需要进行合理地配置即可。

开启站点地图功能

  • 配置项目路径下的 develop.py 文件,在INSTALLED_APPS中加django.contrib.sitemaps,开启站点地图功能,如下所示。 Django开启站点地图功能

  • 注意settings.py中的 TEMPLATES 配置选项中,一定要将APP_DIRS设置为true ,否则可能会出错。 settings.py中的TEMPLATES配置选项

  • 接着配置项目目录下的总路由 urls.py ,我的项目中需要在站点地图中展示的主要是文章,所以在 urls.py 中添加字典info_dict,在该字典对象中写入文章列表数据和文章创建时间字段,写入的方式如下:

info_dict = {
'queryset': Article.objects.filter(is_show=1).order_by('-gmt_created'),
'date_field': 'gmt_modified',
}

queryset表示获取的数据列表,date_field表示更新时间,可以指定为实体类中的具体字段。

  • 然后在urls.py中添加站点地图的 url ,并配置权重priority和更新频率changefreq参数。整个urls.py代码如下所示:
from django.conf import settings
from django.contrib.sitemaps import GenericSitemap
from django.contrib.sitemaps.views import sitemap
from django.urls import re_path
from admin.models import Article
from front import views

info_dict = {
    'queryset': Article.objects.filter(is_show=1).order_by('-gmt_created'),
    'date_field': 'gmt_modified',
}

urlpatterns = [
 re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': {'blog': GenericSitemap(info_dict,  priority=0.6, changefreq='daily')}},
name='django.contrib.sitemaps.views.sitemap'),
]

上述代码中 re_path 函数的含义为,当用户访问 sitemap.xml 链接时,django会把后台生成的站点地图以 xml 的形式显示出来。

priority表示当前条目在网站中的权重,默认为0.5,范围为0 ~ 1。

changefreq表修改频率,可配置

always
hourly
daily
weekly
monthly
yearly
never

注意事项

由于站点地图中需要显示链接地址,而 django 默认是不生成链接地址的,所以需要在实体类中重写 get_absolute_url 方法,这里用到了 reverse 函数,可以通过传递一个或者多个参数,以返回当前条目访问的链接地址。如下所示:

from django.urls import reverse
# 文章
class Article(models.Model):
    id = models.BigAutoField(primary_key=True)
    is_show = models.IntegerField(blank=True, null=True, default=1)
    title = models.CharField(max_length=64)
    img = models.TextField(max_length=100, default=None)
    content = models.TextField()
    gmt_created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
    gmt_modified = models.DateTimeField(blank=True, null=True, auto_now=True)
    remark = models.CharField(max_length=255, blank=True, null=True)

def get_absolute_url(self): # 重写获取条目访问地址方法 
    return reverse('articleDetail', kwargs={'article_id': self.id})

测试

运行项目,在浏览器中输入 http://127.0.0.1:8000/sitemap.xml 观察是否生成了xml形式的站点地图。 站点地图sitemap.xml

今天主要讲述了如何在Django中利用内置的模块实现添加站点地图功能。上述方法是属于常规的添加站点地图功能,比较大众化,有兴趣的小伙伴可以查阅一波Django站点地图相关资料,研究更加高级的站点地图定制功能。

0 条评论