1
0
mirror of https://github.com/django/django.git synced 2025-03-31 19:46:42 +00:00

Refined changes made in r12546 to also respect the request.LANGUAGE_CODE in case the LocaleMiddleware is used to discover the language preference.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12624 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jannis Leidel 2010-03-01 10:19:01 +00:00
parent 68dd63b984
commit 284e7e3cbd
3 changed files with 16 additions and 9 deletions

View File

@ -25,7 +25,7 @@ from django.core.cache import cache
from django.utils.encoding import smart_str, iri_to_uri from django.utils.encoding import smart_str, iri_to_uri
from django.utils.http import http_date from django.utils.http import http_date
from django.utils.hashcompat import md5_constructor from django.utils.hashcompat import md5_constructor
from django.utils import translation from django.utils.translation import get_language
from django.http import HttpRequest from django.http import HttpRequest
cc_delim_re = re.compile(r'\s*,\s*') cc_delim_re = re.compile(r'\s*,\s*')
@ -134,6 +134,15 @@ def patch_vary_headers(response, newheaders):
if newheader.lower() not in existing_headers] if newheader.lower() not in existing_headers]
response['Vary'] = ', '.join(vary_headers + additional_headers) response['Vary'] = ', '.join(vary_headers + additional_headers)
def _i18n_cache_key_suffix(request, cache_key):
"""If enabled, returns the cache key ending with a locale."""
if settings.USE_I18N:
# first check if LocaleMiddleware or another middleware added
# LANGUAGE_CODE to request, then fall back to the active language
# which in turn can also fall back to settings.LANGUAGE_CODE
cache_key += '.%s' % getattr(request, 'LANGUAGE_CODE', get_language())
return cache_key
def _generate_cache_key(request, headerlist, key_prefix): def _generate_cache_key(request, headerlist, key_prefix):
"""Returns a cache key from the headers given in the header list.""" """Returns a cache key from the headers given in the header list."""
ctx = md5_constructor() ctx = md5_constructor()
@ -144,18 +153,14 @@ def _generate_cache_key(request, headerlist, key_prefix):
path = md5_constructor(iri_to_uri(request.path)) path = md5_constructor(iri_to_uri(request.path))
cache_key = 'views.decorators.cache.cache_page.%s.%s.%s' % ( cache_key = 'views.decorators.cache.cache_page.%s.%s.%s' % (
key_prefix, path.hexdigest(), ctx.hexdigest()) key_prefix, path.hexdigest(), ctx.hexdigest())
if settings.USE_I18N: return _i18n_cache_key_suffix(request, cache_key)
cache_key += '.%s' % translation.get_language()
return cache_key
def _generate_cache_header_key(key_prefix, request): def _generate_cache_header_key(key_prefix, request):
"""Returns a cache key for the header cache.""" """Returns a cache key for the header cache."""
path = md5_constructor(iri_to_uri(request.path)) path = md5_constructor(iri_to_uri(request.path))
cache_key = 'views.decorators.cache.cache_header.%s.%s' % ( cache_key = 'views.decorators.cache.cache_header.%s.%s' % (
key_prefix, path.hexdigest()) key_prefix, path.hexdigest())
if settings.USE_I18N: return _i18n_cache_key_suffix(request, cache_key)
cache_key += ".%s" % translation.get_language()
return cache_key
def get_cache_key(request, key_prefix=None): def get_cache_key(request, key_prefix=None):
""" """

View File

@ -323,10 +323,13 @@ more on these decorators.
.. versionadded:: 1.2 .. versionadded:: 1.2
If :setting:`USE_I18N` is set to ``True`` then the generated cache key will If :setting:`USE_I18N` is set to ``True`` then the generated cache key will
include the name of the currently active :term:`language<language code>`. include the name of the active :term:`language<language code>`.
This allows you to easily cache multilingual sites without having to create This allows you to easily cache multilingual sites without having to create
the cache key yourself. the cache key yourself.
See :ref:`topics-i18n-deployment` for more on how Django discovers the active
language.
__ `Controlling cache: Using other headers`_ __ `Controlling cache: Using other headers`_
The per-view cache The per-view cache

View File

@ -476,7 +476,6 @@ class CacheI18nTest(unittest.TestCase):
('es', 'Spanish'), ('es', 'Spanish'),
) )
settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix' settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
settings.CACHE_MIDDLEWARE_SECONDS
self.path = '/cache/test/' self.path = '/cache/test/'
def tearDown(self): def tearDown(self):