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