Skip to content

Commit

Permalink
Fixed #21530 -- Prevent AttributeError in default URLconf detection c…
Browse files Browse the repository at this point in the history
…ode.

Thanks to @dmyerscoug for the report and original patch
and to @alasdairnicol for the added tests.
  • Loading branch information
bmispelon committed Dec 7, 2013
1 parent ffc0e0c commit a020dd0
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 1 deletion.
2 changes: 1 addition & 1 deletion django/views/debug.py
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ def technical_404_response(request, exception):
or (request.path == '/'
and len(tried) == 1 # default URLconf
and len(tried[0]) == 1
and tried[0][0].app_name == tried[0][0].namespace == 'admin')):
and getattr(tried[0][0], 'app_name', '') == getattr(tried[0][0], 'namespace', '') == 'admin')):
return default_urlconf(request)

urlconf = getattr(request, 'urlconf', settings.ROOT_URLCONF)
Expand Down
8 changes: 8 additions & 0 deletions tests/view_tests/default_urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from django.conf.urls import patterns, include, url

from django.contrib import admin

urlpatterns = patterns('',
# This is the same as in the default project template
url(r'^admin/', include(admin.site.urls)),
)
5 changes: 5 additions & 0 deletions tests/view_tests/regression_21530_urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.conf.urls import patterns, url

urlpatterns = patterns('',
url(r'^index/$', 'view_tests.views.index_page', name='index'),
)
29 changes: 29 additions & 0 deletions tests/view_tests/tests/test_debug.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,35 @@ def test_no_template_source_loaders(self):
"""
self.assertRaises(TemplateDoesNotExist, self.client.get, '/render_no_template/')

@override_settings(ROOT_URLCONF='view_tests.default_urls')
def test_default_urlconf_template(self):
"""
Make sure that the default urlconf template is shown shown instead
of the technical 404 page, if the user has not altered their
url conf yet.
"""
response = self.client.get('/')
self.assertContains(
response,
"<h2>Congratulations on your first Django-powered page.</h2>"
)

@override_settings(ROOT_URLCONF='view_tests.regression_21530_urls')
def test_regression_21530(self):
"""
Regression test for bug #21530.
If the admin app include is replaced with exactly one url
pattern, then the technical 404 template should be displayed.
The bug here was that an AttributeError caused a 500 response.
"""
response = self.client.get('/')
self.assertContains(
response,
"Page not found <span>(404)</span>",
status_code=404
)

class ExceptionReporterTests(TestCase):
rf = RequestFactory()
Expand Down

0 comments on commit a020dd0

Please sign in to comment.