Django: Overwrite ROOT_URLCONF with request.urlconf in middleware

青春壹個敷衍的年華 提交于 2019-12-18 13:35:29

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!