summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2013-01-11 21:27:51 +0100
committerClaude Paroz <claude@2xlibre.net>2013-01-11 21:35:45 +0100
commitb3887ab98ac5317ebe7889e8b35752ebfd9740f9 (patch)
tree9723c9d7b70009021802b0f94e2cb3424edc0444
parent1d03ff06bbcc726c815f26f79067692019b2c71a (diff)
[1.5.x] Fixed #19488 -- Made i18n_patterns redirect work with non-slash-ending paths
Thanks Daniel Gerzo for the report and the initial patch. Backport of bcdb4898c from master.
-rw-r--r--django/middleware/locale.py8
-rw-r--r--tests/regressiontests/i18n/patterns/tests.py4
-rw-r--r--tests/regressiontests/i18n/patterns/urls/default.py1
3 files changed, 10 insertions, 3 deletions
diff --git a/django/middleware/locale.py b/django/middleware/locale.py
index 628782b181..f693e4d242 100644
--- a/django/middleware/locale.py
+++ b/django/middleware/locale.py
@@ -31,10 +31,12 @@ class LocaleMiddleware(object):
and self.is_language_prefix_patterns_used()):
urlconf = getattr(request, 'urlconf', None)
language_path = '/%s%s' % (language, request.path_info)
- if settings.APPEND_SLASH and not language_path.endswith('/'):
- language_path = language_path + '/'
+ path_valid = is_valid_path(language_path, urlconf)
+ if (not path_valid and settings.APPEND_SLASH
+ and not language_path.endswith('/')):
+ path_valid = is_valid_path("%s/" % language_path, urlconf)
- if is_valid_path(language_path, urlconf):
+ if path_valid:
language_url = "%s://%s/%s%s" % (
request.is_secure() and 'https' or 'http',
request.get_host(), language, request.get_full_path())
diff --git a/tests/regressiontests/i18n/patterns/tests.py b/tests/regressiontests/i18n/patterns/tests.py
index 358cdf65db..639e03f288 100644
--- a/tests/regressiontests/i18n/patterns/tests.py
+++ b/tests/regressiontests/i18n/patterns/tests.py
@@ -115,6 +115,7 @@ class URLTranslationTests(URLTestCaseBase):
with translation.override('nl'):
self.assertEqual(reverse('users'), '/nl/gebruikers/')
+ self.assertEqual(reverse('prefixed_xml'), '/nl/prefixed.xml')
with translation.override('pt-br'):
self.assertEqual(reverse('users'), '/pt-br/usuarios/')
@@ -186,6 +187,9 @@ class URLRedirectWithoutTrailingSlashTests(URLTestCaseBase):
self.assertIn(('http://testserver/en/account/register/', 301), response.redirect_chain)
self.assertRedirects(response, '/en/account/register/', 302)
+ response = self.client.get('/prefixed.xml', HTTP_ACCEPT_LANGUAGE='en', follow=True)
+ self.assertRedirects(response, '/en/prefixed.xml', 302)
+
class URLRedirectWithoutTrailingSlashSettingTests(URLTestCaseBase):
"""
diff --git a/tests/regressiontests/i18n/patterns/urls/default.py b/tests/regressiontests/i18n/patterns/urls/default.py
index f117502753..00b90b14b7 100644
--- a/tests/regressiontests/i18n/patterns/urls/default.py
+++ b/tests/regressiontests/i18n/patterns/urls/default.py
@@ -14,6 +14,7 @@ urlpatterns = patterns('',
urlpatterns += i18n_patterns('',
url(r'^prefixed/$', view, name='prefixed'),
+ url(r'^prefixed\.xml$', view, name='prefixed_xml'),
url(_(r'^users/$'), view, name='users'),
url(_(r'^account/'), include('regressiontests.i18n.patterns.urls.namespace', namespace='account')),
)