2017-01-30 55 views
1

我已经将多个站点定义为建议的站点框架文档。Django站点框架可以在同一个实例上使用多个站点吗?

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

我试图做的是运行一个单一的实例,其中多个网站可用,正确的网站应根据网站的当前网址进行选择。

站点documentation状态:

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

于是,我就从我的settings.py删除SITE_ID并希望Django的将检查域查找当前站点如上所述,howewer失败但下列情况除外:

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进行硬编码?

我使用Django版本1.9.9使用Python 3.4.3

回答

1

要“检查当前域”你需要有一个请求 - 在错误消息明确mentionned:

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

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

+0

是的,我刚刚意识到,当我发布的问题,谢谢你! – matyas

+0

@matyas这不回答这个问题 - 这是可能的,如果是的话,你需要做些什么才能使它工作? – YPCrumble

+0

@YPCrumble是的,这是可能的。如果您的设置中没有定义site_id,则需要有一个requestcontext才能使Sites框架知道当前网站是什么。 [get_current_site快捷方式的文档](http://example.com)https://docs.djangoproject.com/en/1.11/ref/contrib/sites/#django.contrib.sites.shortcuts.get_current_site。这个请求必须传递给get_current_site函数get_current_site(request),这会给你当前的网站 – matyas

1

最好的解决方法是简单地添加Sites framework middleware:在每次请求

'django.contrib.sites.middleware.CurrentSiteMiddleware' 

这会自动将一个请求对象Site.objects.get_current()。

相关问题