1

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

4

1 回答 1

2

不应该在运行时更改您的设置

更好的方法是设置请求urlconf设置,如django 如何处理url 文档中的请求部分所述。

if request.subdomain == 'foo':
    request.urlconf = 'bqsite.urls'
else:
    request.urlconf = 'dhsite.urls'
于 2012-11-02T16:40:21.743 回答