从没有settings.SITE_ID的当前站点获取对象

时间:2018-05-03 15:36:58

标签: django django-sites

我正在寻找与CurrentSiteManager提供的功能相同的功能,但无需在settings.py中将SITE_ID指定为the CurrentSiteManager requires。有关当前站点的信息应来自请求。我对这个问题的看法是成为一名自定义经理,但有什么我想念的吗?这样做的好方法是什么? CurrentSiteManager应提供此功能似乎相当微不足道。提交功能请求是否有意义?

1 个答案:

答案 0 :(得分:0)

你写道:

  

有关当前网站的信息应来自请求。

这里有一个很大的假设,那就是经理总是会有一个请求上下文。

这不是Django可以做出的假设:任何通用模型管理器必须在请求上下文之外工作,因为存在请求上下文不可用的各种情况 - 例如,管理命令,迁移,任务等。即使您处于请求的上下文中,您的经理也不知道这一点,除非您明确地将其传递给经理上的任何方法(即,您需要这些方法来接受request参数)。这就是CurrentSiteManager requires a SITE_ID

的原因
  

只有在您的设置中定义了SITE_ID设置时,才能使用CurrentSiteManager。

如果您确实要在请求上下文中过滤对象,则Django会提供CurrentSiteMiddleware以将当前站点添加到所有请求中。在您的视图中,您可以在此site上过滤对象。

有一些项目已经实施了一个自定义CurrentSiteManager的项目,可以满足您的要求 - 我想到的是Mezzanine您可以借用的项目({3}}请注意,它涉及到线程本地人,并仍然需要回退到SITE_ID设置。