Fixed #17817 -- Modified LocalMiddleware to use full URLs when redirecting to i18n URLs. Thanks to Paul for keeping an eye on the standards.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17633 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
b9bf7cce89
commit
126d9e1b49
|
@ -33,9 +33,12 @@ class LocaleMiddleware(object):
|
||||||
language_path = '/%s%s' % (language, request.path_info)
|
language_path = '/%s%s' % (language, request.path_info)
|
||||||
if settings.APPEND_SLASH and not language_path.endswith('/'):
|
if settings.APPEND_SLASH and not language_path.endswith('/'):
|
||||||
language_path = language_path + '/'
|
language_path = language_path + '/'
|
||||||
|
|
||||||
if is_valid_path(language_path, urlconf):
|
if is_valid_path(language_path, urlconf):
|
||||||
return HttpResponseRedirect(
|
language_url = "%s://%s/%s%s" % (
|
||||||
'/%s%s' % (language, request.get_full_path()))
|
request.is_secure() and 'https' or 'http',
|
||||||
|
request.get_host(), language, request.get_full_path())
|
||||||
|
return HttpResponseRedirect(language_url)
|
||||||
translation.deactivate()
|
translation.deactivate()
|
||||||
|
|
||||||
patch_vary_headers(response, ('Accept-Language',))
|
patch_vary_headers(response, ('Accept-Language',))
|
||||||
|
|
|
@ -182,12 +182,10 @@ class URLRedirectWithoutTrailingSlashTests(URLTestCaseBase):
|
||||||
self.assertRedirects(response, '/not-prefixed/', 301)
|
self.assertRedirects(response, '/not-prefixed/', 301)
|
||||||
|
|
||||||
def test_en_redirect(self):
|
def test_en_redirect(self):
|
||||||
response = self.client.get('/account/register', HTTP_ACCEPT_LANGUAGE='en')
|
response = self.client.get('/account/register', HTTP_ACCEPT_LANGUAGE='en', follow=True)
|
||||||
# target status code of 301 because of CommonMiddleware redirecting
|
# target status code of 301 because of CommonMiddleware redirecting
|
||||||
self.assertRedirects(response, '/en/account/register', 302, target_status_code=301)
|
self.assertIn(('http://testserver/en/account/register/', 301), response.redirect_chain)
|
||||||
|
self.assertRedirects(response, '/en/account/register/', 302)
|
||||||
response = self.client.get(response['location'])
|
|
||||||
self.assertRedirects(response, '/en/account/register/', 301)
|
|
||||||
|
|
||||||
|
|
||||||
class URLRedirectWithoutTrailingSlashSettingTests(URLTestCaseBase):
|
class URLRedirectWithoutTrailingSlashSettingTests(URLTestCaseBase):
|
||||||
|
|
Loading…
Reference in New Issue