Django SiteMap 站点地图

发布于 2021-04-07 12:14:40 字数 2243 浏览 1232 评论 0

首先 django.contrib.sitemaps 添加到 INSTALLED_APPS,sitemaps 会利用模版加载器 django.template.loaders.app_directories.Loader 加载的模版。默认情况下,这个加载器已经存在 django 的 global_settings.py 文件中的。

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    #'django.template.loaders.eggs.Loader',
)

以前介绍过一篇文章有个参数叫 STATICFILES_FINEDERS,也有类似的两个模块是:

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'django.contrib.staticfiles.finders.FileSystemFinder',
)

接下来就是配置URL:

(r'^sitemap\.xml

Sitemap class

一个 Sitemap 类代表 model 里面一个实体类的部分,这部分最终会出现在 sitemap.xml 中的。下面就是一个简单的 sitemap 类,他会显示满足条件 is_public=True 和 status=p的blog。

#!encoding=utf-8

from django.contrib.sitemaps import Sitemap 
from apps.blog.models import Blog 

class BlogSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.5

    def items(self):
        return Blog.objects.filter(is_public=True).filter(status='p')

    def lastmod(self, obj):
        return obj.update_time

因为 sitemap.xml 显示的都是每个 blog 的 url,因此 BlogSitemap 还有一个方法叫 location(),用来定义blog的url的,默认这个方法会调用blog的get_absolute_url()方法,如果你的blog类没有实现这个方法那么在访问/sitemap.xml的就会出错了。

AttributeError at /sitemap.xml
'Blog' object has no attribute 'get_absolute_url'
Request Method:    GET
Request URL:    http://localhost:8000/sitemap.xml

因此自己来实现 location 方法

def location(self, obj):
    return  r'/blog/%d/%s' % (obj.id, obj.link)

现在访问 http://localhost:8000/sitemap.xml,你就能正常查看到sitemap了。

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>
http://localhost:8000/blog/1/personal-blog-based-django-and-bootstrap
</loc>
<lastmod>2014-03-20</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
, 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})

Sitemap class

一个 Sitemap 类代表 model 里面一个实体类的部分,这部分最终会出现在 sitemap.xml 中的。下面就是一个简单的 sitemap 类,他会显示满足条件 is_public=True 和 status=p的blog。

因为 sitemap.xml 显示的都是每个 blog 的 url,因此 BlogSitemap 还有一个方法叫 location(),用来定义blog的url的,默认这个方法会调用blog的get_absolute_url()方法,如果你的blog类没有实现这个方法那么在访问/sitemap.xml的就会出错了。

因此自己来实现 location 方法

现在访问 http://localhost:8000/sitemap.xml,你就能正常查看到sitemap了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84959 人气
更多

推荐作者

lioqio

文章 0 评论 0

Single

文章 0 评论 0

禾厶谷欠

文章 0 评论 0

alipaysp_2zg8elfGgC

文章 0 评论 0

qq_N6d4X7

文章 0 评论 0

放低过去

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文