Django中的子域问题

时间:2012-11-02 16:23:31

标签: python django subdomain middleware

我正在尝试设置一个中间件来读取请求中的子域名,并根据子域名提供不同的应用程序的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文件。

1 个答案:

答案 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'