# 1) site_id_hook.py from threading import local SITE_THREAD_INFO = local() class SiteIDHook: def __int__(self): return SITE_THREAD_INFO.SITE_ID def __hash__(self): return SITE_THREAD_INFO.SITE_ID # 2) settings.py ..... from site_id_hook import SiteIDHook, SITE_THREAD_INFO SITE_ID = SiteIDHook() .... # 3) site_middleware.py (simple middleware) class SiteOnFlyDetectionMiddleware: def process_request(self, request): sid = None host = request.META.get('HTTP_HOST') # ... # any logic for `sid` #... settings.SITE_THREAD_INFO.SITE_ID = sid Ok, now settings.SITE_ID will change in middleware on fly.