Django Sitemaps:只获取当前网站的页面

时间:2012-03-22 07:10:03

标签: django django-models django-sites django-sitemaps

我想使用Django Sitemaps创建一个特定于站点的站点地图。

我的想法是做这样的事情:

def items(self):
    current_site = Site.objects.get_current(self.request)
    return current_site.pages.filter(draft=False)

但我有两个问题:

  1. self.request未定义,是否有办法在Sitemap中获取真实的current_site
  2. 商品网址不正确,应以正确的current_site
  3. 开头

    我想,我必须直接将正确的查询集传递给我的Sitemap,但我该怎么办呢?

    谢谢,

    雷米

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式传递特定于站点的查询集。

def items(self):   
  return YourModel.objects.by_site()

by_siteYourModel的经理职能,

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.pySite.objects.get_current()允许request在任何地方工作,而无需get_absolute_url()个对象。

问题2:

域名应包含在网址中。站点地图是从域请求的,因此已知所有域都在该域中。

这适用于django中的所有网址。

要解决此问题,请确保模型上的"/"方法返回以get_absolute_url()开头的字符串。与域名无关。

使用location()生成项目的网址,或者使用该项目调用Sitemap.location()。 {{1}}关于url应该是什么形式的示例的文档。

有关详细信息,请查看此bug ticket,了解相同的问题。