summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2015-03-02 12:12:22 +0100
committerClaude Paroz <claude@2xlibre.net>2015-03-02 20:06:24 +0100
commit80be597a7b2530ec0893e1d9ee8275e281f026dc (patch)
tree19e2388da98614b2c73c42c05e47aa8b3235fb64
parentfea45eff5a2f2ad10b2788603db80e5a4fe6be06 (diff)
Fixed #24360 -- Delayed internal LocaleMiddleware variable initialization
Failing in a middleware `__init__` is preventing proper debug view.
-rw-r--r--django/middleware/locale.py21
1 files changed, 9 insertions, 12 deletions
diff --git a/django/middleware/locale.py b/django/middleware/locale.py
index 9719150d59..647f4f9e62 100644
--- a/django/middleware/locale.py
+++ b/django/middleware/locale.py
@@ -7,6 +7,7 @@ from django.core.urlresolvers import (
from django.http import HttpResponseRedirect
from django.utils import translation
from django.utils.cache import patch_vary_headers
+from django.utils.functional import cached_property
class LocaleMiddleware(object):
@@ -19,17 +20,9 @@ class LocaleMiddleware(object):
"""
response_redirect_class = HttpResponseRedirect
- def __init__(self):
- self._is_language_prefix_patterns_used = False
- for url_pattern in get_resolver(None).url_patterns:
- if isinstance(url_pattern, LocaleRegexURLResolver):
- self._is_language_prefix_patterns_used = True
- break
-
def process_request(self, request):
- check_path = self.is_language_prefix_patterns_used()
language = translation.get_language_from_request(
- request, check_path=check_path)
+ request, check_path=self.is_language_prefix_patterns_used)
translation.activate(language)
request.LANGUAGE_CODE = translation.get_language()
@@ -37,7 +30,7 @@ class LocaleMiddleware(object):
language = translation.get_language()
language_from_path = translation.get_language_from_path(request.path_info)
if (response.status_code == 404 and not language_from_path
- and self.is_language_prefix_patterns_used()):
+ and self.is_language_prefix_patterns_used):
urlconf = getattr(request, 'urlconf', None)
language_path = '/%s%s' % (language, request.path_info)
path_valid = is_valid_path(language_path, urlconf)
@@ -60,16 +53,20 @@ class LocaleMiddleware(object):
)
return self.response_redirect_class(language_url)
- if not (self.is_language_prefix_patterns_used()
+ if not (self.is_language_prefix_patterns_used
and language_from_path):
patch_vary_headers(response, ('Accept-Language',))
if 'Content-Language' not in response:
response['Content-Language'] = language
return response
+ @cached_property
def is_language_prefix_patterns_used(self):
"""
Returns `True` if the `LocaleRegexURLResolver` is used
at root level of the urlpatterns, else it returns `False`.
"""
- return self._is_language_prefix_patterns_used
+ for url_pattern in get_resolver(None).url_patterns:
+ if isinstance(url_pattern, LocaleRegexURLResolver):
+ return True
+ return False