3

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

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

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

但我有两个问题:

  1. self.request没有定义,有没有办法current_site在站点地图中获取真实的内容?
  2. 商品网址不正确,应以正确开头current_site

我想,我必须将正确的查询集直接传递给我的站点地图,但我该怎么做呢?

谢谢,

雷米

4

2 回答 2

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)
于 2012-05-14T07:01:48.677 回答
-2

听起来sites框架的使用方式错误

sites框架并非旨在根据请求动态切换站点。它适用于从同一数据库运行的多个单独部署。

问题一:

要修复您的items()功能,SITE_ID需要在settings.py其中设置允许Site.objects.get_current()在任何地方工作,而不需要request对象。

问题 2:

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

这适用于 django 中的所有 url。

要修复它,请确保get_absolute_url()模型上的方法返回一个以"/". 与域名无关。

项目的 url 是使用项目生成的get_absolute_url()或通过调用项目生成Sitemap.location()的。location()有关 url 应采用何种形式的示例文档。

有关更多信息,请查看此错误票,关于相同的问题。

于 2012-05-14T07:33:04.713 回答