summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Stenstròˆm <em@kth.se>2012-11-17 13:14:12 +0100
committerTim Graham <timograham@gmail.com>2013-10-03 16:15:29 -0400
commit7a97df190cb993056aa097befb3813100cfc286e (patch)
treeca4335710cd7ec345351f28d416b311bbae0c2c7
parentfa2e1371cda1e72d82b4133ad0b49a18e43ba411 (diff)
Fixed #19277 -- Added LocaleMiddleware.response_redirect_class
Thanks ppetrid at yawd.eu for the suggestion.
-rw-r--r--django/middleware/locale.py3
-rw-r--r--docs/ref/middleware.txt6
-rw-r--r--docs/releases/1.7.txt6
-rw-r--r--tests/i18n/patterns/tests.py16
4 files changed, 30 insertions, 1 deletions
diff --git a/django/middleware/locale.py b/django/middleware/locale.py
index cd5d2cce71..0611b6044a 100644
--- a/django/middleware/locale.py
+++ b/django/middleware/locale.py
@@ -18,6 +18,7 @@ class LocaleMiddleware(object):
translated to the language the user desires (if the language
is available, of course).
"""
+ response_redirect_class = HttpResponseRedirect
def __init__(self):
self._supported_languages = OrderedDict(settings.LANGUAGES)
@@ -52,7 +53,7 @@ class LocaleMiddleware(object):
language_url = "%s://%s/%s%s" % (
'https' if request.is_secure() else 'http',
request.get_host(), language, request.get_full_path())
- return HttpResponseRedirect(language_url)
+ return self.response_redirect_class(language_url)
# Store language back into session if it is not present
if hasattr(request, 'session'):
diff --git a/docs/ref/middleware.txt b/docs/ref/middleware.txt
index 7aac286c2d..9799db0865 100644
--- a/docs/ref/middleware.txt
+++ b/docs/ref/middleware.txt
@@ -151,6 +151,12 @@ Enables language selection based on data from the request. It customizes
content for each user. See the :doc:`internationalization documentation
</topics/i18n/translation>`.
+.. attribute:: LocaleMiddleware.response_redirect_class
+
+Defaults to :class:`~django.http.HttpResponseRedirect`. Subclass
+``LocaleMiddleware`` and override the attribute to customize the redirects
+issued by the middleware.
+
Message middleware
------------------
diff --git a/docs/releases/1.7.txt b/docs/releases/1.7.txt
index 8f650a1a9e..4014007bfa 100644
--- a/docs/releases/1.7.txt
+++ b/docs/releases/1.7.txt
@@ -267,6 +267,12 @@ Forms
:func:`~django.forms.formsets.formset_factory` to allow validating
a minimum number of submitted forms.
+Internationalization
+^^^^^^^^^^^^^^^^^^^^
+
+* The :attr:`django.middleware.locale.LocaleMiddleware.response_redirect_class`
+ attribute allows you to customize the redirects issued by the middleware.
+
Management Commands
^^^^^^^^^^^^^^^^^^^
diff --git a/tests/i18n/patterns/tests.py b/tests/i18n/patterns/tests.py
index 85eb7db084..1a8b752e89 100644
--- a/tests/i18n/patterns/tests.py
+++ b/tests/i18n/patterns/tests.py
@@ -4,6 +4,8 @@ import os
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse, clear_url_caches
+from django.http import HttpResponsePermanentRedirect
+from django.middleware.locale import LocaleMiddleware
from django.test import TestCase
from django.test.utils import override_settings
from django.template import Template, Context
@@ -11,6 +13,10 @@ from django.utils._os import upath
from django.utils import translation
+class PermanentRedirectLocaleMiddleWare(LocaleMiddleware):
+ response_redirect_class = HttpResponsePermanentRedirect
+
+
@override_settings(
USE_I18N=True,
LOCALE_PATHS=(
@@ -181,6 +187,16 @@ class URLRedirectTests(URLTestCaseBase):
response = self.client.get(response['location'])
self.assertEqual(response.status_code, 200)
+ @override_settings(
+ MIDDLEWARE_CLASSES=(
+ 'i18n.patterns.tests.PermanentRedirectLocaleMiddleWare',
+ 'django.middleware.common.CommonMiddleware',
+ ),
+ )
+ def test_custom_redirect_class(self):
+ response = self.client.get('/account/register/', HTTP_ACCEPT_LANGUAGE='en')
+ self.assertRedirects(response, '/en/account/register/', 301)
+
class URLVaryAcceptLanguageTests(URLTestCaseBase):
"""