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. request.urlconf
.
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 urlconf
property.
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.