我正在寻找与CurrentSiteManager提供的功能相同的功能,但无需在settings.py中将SITE_ID指定为the CurrentSiteManager requires。有关当前站点的信息应来自请求。我对这个问题的看法是成为一名自定义经理,但有什么我想念的吗?这样做的好方法是什么? CurrentSiteManager应提供此功能似乎相当微不足道。提交功能请求是否有意义?
答案 0 :(得分:0)
你写道:
有关当前网站的信息应来自请求。
这里有一个很大的假设,那就是经理总是会有一个请求上下文。
这不是Django可以做出的假设:任何通用模型管理器必须在请求上下文之外工作,因为存在请求上下文不可用的各种情况 - 例如,管理命令,迁移,任务等。即使您处于请求的上下文中,您的经理也不知道这一点,除非您明确地将其传递给经理上的任何方法(即,您需要这些方法来接受request
参数)。这就是CurrentSiteManager
requires a SITE_ID
:
只有在您的设置中定义了
SITE_ID
设置时,才能使用CurrentSiteManager。
如果您确实要在请求上下文中过滤对象,则Django会提供CurrentSiteMiddleware
以将当前站点添加到所有请求中。在您的视图中,您可以在此site
上过滤对象。
有一些项目已经实施了一个自定义CurrentSiteManager
的项目,可以满足您的要求 - 我想到的是Mezzanine您可以借用的项目({3}}请注意,它涉及到线程本地人,并仍然需要回退到SITE_ID
设置。