我想使用Django Sitemaps创建一个特定于站点的站点地图。
我的想法是做这样的事情:
def items(self):
current_site = Site.objects.get_current(self.request)
return current_site.pages.filter(draft=False)
但我有两个问题:
self.request
未定义,是否有办法在Sitemap中获取真实的current_site
?current_site
我想,我必须直接将正确的查询集传递给我的Sitemap,但我该怎么办呢?
谢谢,
雷米
答案 0 :(得分:1)
您可以通过这种方式传递特定于站点的查询集。
def items(self):
return YourModel.objects.by_site()
by_site
是YourModel
的经理职能,
def by_site(self, site=None, **kwargs):
"""Get all pages for this site"""
if not site:
site = Site.objects.get_current()
site = site.id
return self.filter(site__id__exact = site, **kwargs)
答案 1 :(得分:-2)
听起来sites
框架的使用方式错误
sites
框架无意根据请求动态切换网站。它适用于从同一数据库运行的多个单独部署。
问题1:
要修复items()
功能,需要在SITE_ID
中设置settings.py
,Site.objects.get_current()
允许request
在任何地方工作,而无需get_absolute_url()
个对象。
问题2:
域名不应包含在网址中。站点地图是从域请求的,因此已知所有域都在该域中。
这适用于django中的所有网址。
要解决此问题,请确保模型上的"/"
方法返回以get_absolute_url()
开头的字符串。与域名无关。
使用location()
生成项目的网址,或者使用该项目调用Sitemap.location()
。 {{1}}关于url应该是什么形式的示例的文档。
有关详细信息,请查看此bug ticket,了解相同的问题。