我正在寻找与 CurrentSiteManager 提供的相同功能,但不必像CurrentSiteManager 所要求的那样在 settings.py 中指定 SITE_ID 。有关当前站点的信息应来自请求。我对这个问题的看法是制作一个自定义管理器,但我有什么遗漏吗?这样做的好方法是什么?CurrentSiteManager 应该提供此功能似乎很简单。提交功能请求是否有意义?
问问题
100 次
1 回答
0
你写:
有关当前站点的信息应来自请求。
这里有一个很大的假设,即管理器总是有一个可用的请求上下文。
这不是 Django 可以做出的假设:任何通用模型管理器都必须在请求上下文之外工作,因为在各种情况下请求上下文不可用 - 例如,管理命令、迁移、任务等。甚至如果您在请求的上下文中,您的经理对此一无所知,除非您将其显式传递给经理上的任何方法(即,您需要这些方法来接受request
参数)。这就是为什么CurrentSiteManager
需要一个SITE_ID
:
SITE_ID
CurrentSiteManager 仅在您的设置中定义了设置时才可用。
如果您确实想在请求上下文中过滤对象,那么 Django 提供了CurrentSiteMiddleware
将当前站点添加到所有请求的方法。然后,您可以在您的视图中过滤 this 上的对象site
。
有一些项目的例子已经实现了一个可以满足CurrentSiteManager
你要求的自定义 - 想到的一个是Mezzanine,你可以从中借用(请注意,它涉及与线程本地人相处,并且仍然需要一个回退到某个SITE_ID
设置)。
于 2018-05-04T02:39:33.560 回答