Commit 5a4884a9 authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

[1.6.x] Fixed #21530 -- Prevent AttributeError in default URLconf detection code.

Thanks to @dmyerscoug for the report and original patch
and to @alasdairnicol for the added tests.

Backport of a020dd0a from master.
parent 4f959083
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -471,7 +471,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)
+8 −0
Original line number Diff line number Diff line
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 −0
Original line number Diff line number Diff line
from django.conf.urls import patterns, url

urlpatterns = patterns('',
    url(r'^index/$', 'view_tests.views.index_page', name='index'),
)
+29 −0
Original line number Diff line number Diff line
@@ -122,6 +122,35 @@ class DebugViewTests(TestCase):
        """
        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()