"""Cache of Site related settings Site IDs and urlconfs are such that are testd on *all* requests thus they need to be cached. """ from django.conf import settings from django.contrib.sites.models import Site _CACHE_SITE_IDS = None _CACHE_URLCONFS_BY_DOMAIN = getattr(settings, 'MULTIDOMAIN_URLCONFS', dict()) def get_urlconf(domain=""): """Get urlconf (by domain, if omitted the global ROOT_URLCONF)""" return _CACHE_URLCONFS_BY_DOMAIN.get(domain, settings.ROOT_URLCONF) def get_site_id(domain=""): """Get site ID (by domain, if omitted the global SITE_ID is fetched)""" refresh_multidomain_sites() return _CACHE_SITE_IDS.get(domain, settings.SITE_ID) def get_site(domain=""): """Get current Site (by domain, if omitted the global site is fetched) .. note: Site *objects* are not cached, only site ids. """ site_id = get_site_id(domain) if site_id == settings.SITE_ID: return Site.objects.get_current() return Site.objects.get(pk=site_id) def refresh_multidomain_sites(forced=False): """Refresh the cache of site IDs :param forced: Force refresh """ global _CACHE_SITE_IDS if not _CACHE_SITE_IDS or forced: _CACHE_SITE_IDS = {} for s in Site.objects.all(): _CACHE_SITE_IDS[s.domain] = s.id