Django SiteMap 站点地图
首先 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论