问题
I am trying to overwrite ROOT_URLCONF with another url when the request contains "api" subdomain and this is what I have so far.
from django.utils.cache import patch_vary_headers
class SubdomainMiddleware:
def process_request(self, request):
path = request.get_full_path()
root_url = path.split('/')[1]
domain_parts = request.get_host().split('.')
if (len(domain_parts) > 2):
subdomain = domain_parts[0]
if (subdomain.lower() == 'www'):
subdomain = None
else:
subdomain = None
request.subdomain = subdomain
request.domain = domain
if request.subdomain == "api":
request.urlconf = "rest_api_example.urls.api"
else:
request.urlconf = "rest_api_example.urls.
I tried using set_urlconf module "from django.core.urlresolvers" too but it didn't work. Am I missing something here?
回答1:
Interestingly, I used set_urlconf module and request.urlconf to set url path and now it's working!
from django.core.urlresolvers import set_urlconf
if request.subdomain == "api":
set_urlconf("rest_api_example.urls.api")
request.urlconf = "rest_api_example.urls.api"
else:
set_urlconf("rest_api_example.urls.default")
request.urlconf = "rest_api_example.urls.default"
回答2:
As for many things in django, there is already the app for that - https://github.com/jezdez/django-hosts
来源:https://stackoverflow.com/questions/30928501/django-overwrite-root-urlconf-with-request-urlconf-in-middleware