我已将多个网站定义为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
答案 0 :(得分:2)
最好的解决方案是简单地添加Sites framework middleware:
'django.contrib.sites.middleware.CurrentSiteMiddleware'
这会在每次请求时自动将请求对象传递给Site.objects.get_current()。
答案 1 :(得分:1)
要“检查当前域名”,您需要提出请求 - 正如错误消息中明确提到的那样:
或将请求传递给Site.objects.get_current()
否则代码如何知道“当前域名”?