import threading request_cfg = threading.local() class RouterMiddleware (object): def process_view( self, request, view_func, args, kwargs ): # Here you could do something with request.path instead. if 'cfg' in kwargs: request_cfg.cfg = kwargs['cfg'] def process_response( self, request, response ): if hasattr( request_cfg, 'cfg' ): del request_cfg.cfg return response class DatabaseRouter (object): def _default_db( self ): from django.conf import settings if hasattr( request_cfg, 'cfg' ) and request_cfg.cfg in settings.DATABASES: return request_cfg.cfg else: return 'default' def db_for_read( self, model, **hints ): return self._default_db() def db_for_write( self, model, **hints ): return self._default_db()