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のウェルカム画面が表示されますが、リフレッシュ後に正しいURLファイルが使用されるという、本当に奇妙で不安定な動作が発生しています。

4

1 に答える 1

2

実行時に設定を変更しないでください。

djangoがURLドキュメントのリクエストを処理する方法urlconfのセクションで示唆されているように、より良いアプローチはリクエスト設定を設定することです。

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