Do you have a need to use different URL pattern sets based on specifics of an HTTP request? Recently, I needed to choose from a predefined URL pattern (ie. URLConf module) based on the domain name of the request, ie. HTTP_HOST. The URL patterns themselves are not dynamically set, just dynamically chosen.
By default, the URL dispatcher in Django finds the URLConf module via the
ROOT_URLCONF setting. However, it will also check the
HTTPRequest for a
urlconf property, ie.
The challenge now is to set
urlconf on the request, and this needs to be done via custom middleware. The logic you employ to choose the URLConf module is entirely up to you, but here is a simple same middleware that sets the
class UrlMiddleware(object): def process_request(self, request): # choose urlconf urlconf = 'myapp.mysubapp.urls' # add it to the request request.urlconf = urlconf return pass
Remember to add the middleware to settings.py. Hope this helps someone.