Created
March 20, 2013 13:59
-
-
Save loic/5204851 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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