Fix lang_slug URL redirect.
parent
1f5608daeb
commit
7fc0569f14
|
@ -1,5 +1,6 @@
|
||||||
from django.conf.urls.defaults import url, patterns
|
from django.conf.urls.defaults import url, patterns
|
||||||
|
|
||||||
|
from projects.constants import LANGUAGES_REGEX
|
||||||
from urls import urlpatterns as main_patterns
|
from urls import urlpatterns as main_patterns
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,6 +36,10 @@ urlpatterns = patterns(
|
||||||
},
|
},
|
||||||
name='docs_detail'),
|
name='docs_detail'),
|
||||||
|
|
||||||
|
url(r'^(?P<lang_slug>%s)/$' % LANGUAGES_REGEX,
|
||||||
|
'core.views.subdomain_handler',
|
||||||
|
name='version_subdomain_handler'),
|
||||||
|
|
||||||
url(r'^(?P<version_slug>.*)/$',
|
url(r'^(?P<version_slug>.*)/$',
|
||||||
'core.views.subdomain_handler',
|
'core.views.subdomain_handler',
|
||||||
name='version_subdomain_handler'),
|
name='version_subdomain_handler'),
|
||||||
|
|
|
@ -235,7 +235,15 @@ def subdomain_handler(request, lang_slug=None, version_slug=None, filename=''):
|
||||||
# Don't add index.html for htmldir.
|
# Don't add index.html for htmldir.
|
||||||
if not filename and project.documentation_type != 'sphinx_htmldir':
|
if not filename and project.documentation_type != 'sphinx_htmldir':
|
||||||
filename = "index.html"
|
filename = "index.html"
|
||||||
if version_slug is None:
|
if version_slug is None and lang_slug:
|
||||||
|
default_version = project.get_default_version()
|
||||||
|
url = reverse(serve_docs, kwargs={
|
||||||
|
'version_slug': default_version,
|
||||||
|
'lang_slug': lang_slug,
|
||||||
|
'filename': filename
|
||||||
|
})
|
||||||
|
return HttpResponseRedirect(url)
|
||||||
|
if version_slug is None and lang_slug is None:
|
||||||
# Handle / on subdomain.
|
# Handle / on subdomain.
|
||||||
default_version = project.get_default_version()
|
default_version = project.get_default_version()
|
||||||
url = reverse(serve_docs, kwargs={
|
url = reverse(serve_docs, kwargs={
|
||||||
|
|
|
@ -47,6 +47,7 @@ class RedirectTests(TestCase):
|
||||||
def test_proper_url_with_lang_slug_only(self):
|
def test_proper_url_with_lang_slug_only(self):
|
||||||
r = self.client.get('/docs/pip/en/')
|
r = self.client.get('/docs/pip/en/')
|
||||||
self.assertEqual(r.status_code, 302)
|
self.assertEqual(r.status_code, 302)
|
||||||
|
self.assertEqual(r['Location'], 'http://testserver/docs/pip/en/latest/')
|
||||||
|
|
||||||
def test_proper_url_full(self):
|
def test_proper_url_full(self):
|
||||||
r = self.client.get('/docs/pip/en/latest/')
|
r = self.client.get('/docs/pip/en/latest/')
|
||||||
|
@ -66,14 +67,17 @@ class RedirectTests(TestCase):
|
||||||
def test_proper_url_with_version_slug_only(self):
|
def test_proper_url_with_version_slug_only(self):
|
||||||
r = self.client.get('/docs/pip/latest/')
|
r = self.client.get('/docs/pip/latest/')
|
||||||
self.assertEqual(r.status_code, 302)
|
self.assertEqual(r.status_code, 302)
|
||||||
|
self.assertEqual(r['Location'], 'http://testserver/docs/pip/en/latest/')
|
||||||
|
|
||||||
# If slug is neither valid lang nor valid version, it should 404.
|
# If slug is neither valid lang nor valid version, it should 404.
|
||||||
|
# TODO: This should 404 directly, not redirect first
|
||||||
def test_improper_url_with_nonexistent_slug(self):
|
def test_improper_url_with_nonexistent_slug(self):
|
||||||
r = self.client.get('/docs/pip/nonexistent/')
|
r = self.client.get('/docs/pip/nonexistent/')
|
||||||
self.assertEqual(r.status_code, 302)
|
self.assertEqual(r.status_code, 302)
|
||||||
r = self.client.get(r['Location'])
|
r = self.client.get(r['Location'])
|
||||||
self.assertEqual(r.status_code, 404)
|
self.assertEqual(r.status_code, 404)
|
||||||
|
|
||||||
|
# TODO: This should 404 directly, not redirect first
|
||||||
def test_improper_url_filename_only(self):
|
def test_improper_url_filename_only(self):
|
||||||
r = self.client.get('/docs/pip/test.html')
|
r = self.client.get('/docs/pip/test.html')
|
||||||
self.assertEqual(r.status_code, 301)
|
self.assertEqual(r.status_code, 301)
|
||||||
|
@ -92,6 +96,7 @@ class RedirectTests(TestCase):
|
||||||
def test_proper_subdomain_with_lang_slug_only(self):
|
def test_proper_subdomain_with_lang_slug_only(self):
|
||||||
r = self.client.get('/en/', HTTP_HOST='pip.readthedocs.org')
|
r = self.client.get('/en/', HTTP_HOST='pip.readthedocs.org')
|
||||||
self.assertEqual(r.status_code, 302)
|
self.assertEqual(r.status_code, 302)
|
||||||
|
self.assertEqual(r['Location'], 'http://pip.readthedocs.org/en/latest/')
|
||||||
|
|
||||||
def test_proper_subdomain_and_url(self):
|
def test_proper_subdomain_and_url(self):
|
||||||
r = self.client.get('/en/latest/', HTTP_HOST='pip.readthedocs.org')
|
r = self.client.get('/en/latest/', HTTP_HOST='pip.readthedocs.org')
|
||||||
|
|
Loading…
Reference in New Issue