我正在尝试设置一个中间件来读取请求中的子域名,并根据子域名提供不同的应用程序的urls.py ...但我得到一些不稳定的行为
这是我的中间件:
class SubdomainsMiddleware:
def process_request(self, request):
request.domain = request.META['HTTP_HOST']
request.subdomain = ''
parts = request.domain.split('.')
if len(parts) == 3 or (re.match("^localhost", parts[-1]) and len(parts) == 2):
request.subdomain = parts[0]
request.domain = '.'.join(parts[1:])
# set the right urlconf
if request.subdomain == 'foo':
settings.ROOT_URLCONF = 'bqsite.urls'
else:
settings.ROOT_URLCONF = 'dhsite.urls'
我的理解是,如果这样做,那么项目的根urls.py永远不会被击中。那是对的吗?我变得非常奇怪和不稳定的行为,如果我重新启动apache,该网站显示django欢迎屏幕,但在refrshing后使用正确的URL文件。
答案 0 :(得分:2)
你shouldn't alter your settings at runtime。
更好的方法是设置请求urlconf
设置,如网址文档中的how django processes a request部分所示。
if request.subdomain == 'foo':
request.urlconf = 'bqsite.urls'
else:
request.urlconf = 'dhsite.urls'