我们正在建立一个多租户网站,有些租户需要不同的网址等。没什么大不了的,这是我们已经通过制作多个urls.py来解决的问题,它可以作为ROOT_URLCONF
。当涉及到请求时,我们只需使用设置request.urlconf
的中间件。到目前为止,非常好。
但我们也在为一堆夜间任务运行Celery,其中一个就是发送电子邮件。在这里,我们没有request
(很明显),所以我们不能用它来切换ROOT_URLCONF
。但是改变django.conf.settings.ROOT_URLCONF
也不起作用(这有点合乎逻辑)。有没有办法切换正在使用“过程中”的URLConf?
运行多个Celery实例并不是一个真正的选项,每个实例都有自己的设置,因为并非所有对象都可以有效地链接到他们所属的租户(视图不同,我们以User
开头知道它的租户。)
答案 0 :(得分:3)
您可以使用django.core.urlresolvers.set_urlconf
:
from django.core.urlresolvers import set_urlconf
set_urlconf('module.path.urls')
这就是django.core.handlers.base.BaseHandler.get_response
uses为当前请求设置解析器的原因。