0

我正在寻找与 CurrentSiteManager 提供的相同功能,但不必像CurrentSiteManager 所要求的那样在 settings.py 中指定 SITE_ID 。有关当前站点的信息应来自请求。我对这个问题的看法是制作一个自定义管理器,但我有什么遗漏吗?这样做的好方法是什么?CurrentSiteManager 应该提供此功能似乎很简单。提交功能请求是否有意义?

4

1 回答 1

0

你写:

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

这里有一个很大的假设,即管理器总是有一个可用的请求上下文。

这不是 Django 可以做出的假设:任何通用模型管理器都必须在请求上下文之外工作,因为在各种情况下请求上下文不可用 - 例如,管理命令、迁移、任务等。甚至如果您在请求的上下文中,您的经理对此一无所知,除非您将其显式传递给经理上的任何方法(即,您需要这些方法来接受request参数)。这就是为什么CurrentSiteManager 需要一个SITE_ID

SITE_IDCurrentSiteManager 仅在您的设置中定义了设置时才可用。

如果您确实想在请求上下文中过滤对象,那么 Django 提供了CurrentSiteMiddleware将当前站点添加到所有请求的方法。然后,您可以在您的视图中过滤 this 上的对象site

有一些项目的例子已经实现了一个可以满足CurrentSiteManager你要求的自定义 - 想到的一个是Mezzanine,你可以从中借用(请注意,它涉及与线程本地人相处,并且仍然需要一个回退到某个SITE_ID设置)。

于 2018-05-04T02:39:33.560 回答