Skip to content

Instantly share code, notes, and snippets.

@loic
Created March 20, 2013 13:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save loic/5204851 to your computer and use it in GitHub Desktop.
Save loic/5204851 to your computer and use it in GitHub Desktop.
diff --git a/django/contrib/sites/models.py b/django/contrib/sites/models.py
index 879497d..0b78455 100644
--- a/django/contrib/sites/models.py
+++ b/django/contrib/sites/models.py
@@ -33,9 +33,9 @@ class SiteManager(models.Manager):
project's settings. The ``Site`` object is cached the first
time it's retrieved from the database.
"""
- from django.conf import settings
+ from django.core.urlresolvers import get_site
try:
- sid = settings.SITE_ID
+ sid = get_site()
except AttributeError:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("You're using the Django \"sites framework\" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.")
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index 900ea8e..7abdba8 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -82,6 +82,10 @@ class BaseHandler(object):
urlconf = settings.ROOT_URLCONF
urlresolvers.set_urlconf(urlconf)
resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
+
+ site = getattr(settings, 'SITE_ID', None)
+ urlresolvers.set_site(site)
+
try:
response = None
# Apply request middleware
@@ -97,6 +101,10 @@ class BaseHandler(object):
urlresolvers.set_urlconf(urlconf)
resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
+ if hasattr(request, 'site'):
+ site = request.site
+ urlresolvers.set_site(site)
+
resolver_match = resolver.resolve(request.path_info)
callback, callback_args, callback_kwargs = resolver_match
request.resolver_match = resolver_match
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index ffe74bc..975014a 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -36,6 +36,9 @@ _prefixes = local()
# Overridden URLconfs for each thread are stored here.
_urlconfs = local()
+# Overridden SITE_ID for each thread are stored here.
+_site = local()
+
class ResolverMatch(object):
def __init__(self, func, args, kwargs, url_name=None, app_name=None, namespaces=None):
@@ -548,6 +551,16 @@ def get_urlconf(default=None):
"""
return getattr(_urlconfs, "value", default)
+def set_site(site):
+ if site:
+ _site.value = site
+ else:
+ if hasattr(_site, "value"):
+ del _site.value
+
+def get_site(default=None):
+ return getattr(_site, "value", default)
+
def is_valid_path(path, urlconf=None):
"""
Returns True if the given path resolves against the default URL resolver,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment