是否可以在同一个实例上使用具有多个站点的Django Sites Framework?

时间:2017-01-30 11:30:38

标签: python django django-sites

我已将多个网站定义为Site Framework建议的文档。

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

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

网站documentation声明:

  

SITE_ID设置指定Site对象的数据库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.

所以看起来虽然文档另有说明,但这个设置并非遗漏

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

是否可以通过仅检查应用程序的当前域来使用Sites Framework而无需在设置文件中对SITE_ID进行硬编码?

我正在使用Django Version 1.9.9和Python 3.4.3

2 个答案:

答案 0 :(得分:2)

最好的解决方案是简单地添加Sites framework middleware

'django.contrib.sites.middleware.CurrentSiteMiddleware'

这会在每次请求时自动将请求对象传递给Site.objects.get_current()。

答案 1 :(得分:1)

要“检查当前域名”,您需要提出请求 - 正如错误消息中明确提到的那样:

  

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

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