4

我已将多个站点定义为建议的站点框架文档。

我知道如果我要运行我的应用程序的多个实例,每个实例都有不同的设置文件(不同的 SITE_ID),Django 将始终知道要使用哪个站点。

我试图做的是运行一个实例,其中有多个站点可用,并且应该根据站点的当前 url 选择正确的站点。

站点文档指出:

SITE_ID 设置指定与该特定设置文件关联的站点对象的数据库 ID。如果省略该设置,get_current_site() 函数将尝试通过将域与 request.get_host() 方法中的主机名进行比较来获取当前站点。

因此,我尝试从我的 settings.py 中删除 SITE_ID,并希望 Django 会检查域以找到如上所述的当前站点,但是这会失败,并出现以下异常:

You're using the Django "sites framework" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting or pass a request to Site.objects.get_current() to fix this error.

所以看起来虽然文档另有建议,但这个设置是不可忽略的

我知道,当没有可用于查找当前站点的请求对象时,使用这样的站点框架会导致问题,但这在我的应用程序的上下文中应该不是问题。

是否可以通过仅检查应用程序的当前域来使用站点框架而无需在设置文件中硬编码 SITE_ID?

我正在使用带有 Python 3.4.3 的 Django 版本 1.9.9

4

2 回答 2

2

The best solution is to simply add the Sites framework middleware:

'django.contrib.sites.middleware.CurrentSiteMiddleware'

This automatically passes a request object to Site.objects.get_current() on every request.

于 2017-09-21T15:39:21.143 回答
1

要“检查当前域”,您需要有一个请求 - 正如错误消息中明确提到的:

或将请求传递给 Site.objects.get_current()

否则代码如何知道“当前域”?

于 2017-01-30T11:35:09.187 回答