diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py index 6002d54443..81f0a9ef3a 100644 --- a/django/core/handlers/base.py +++ b/django/core/handlers/base.py @@ -73,13 +73,15 @@ class BaseHandler(object): from django.conf import settings try: + # Setup default url resolver for this thread, this code is outside + # the try/except so we don't get a spurious "unbound local + # variable" exception in the event an exception is raised before + # resolver is set + urlconf = settings.ROOT_URLCONF + urlresolvers.set_urlconf(urlconf) + resolver = urlresolvers.RegexURLResolver(r'^/', urlconf) try: - # Setup default url resolver for this thread. - urlconf = settings.ROOT_URLCONF - urlresolvers.set_urlconf(urlconf) - resolver = urlresolvers.RegexURLResolver(r'^/', urlconf) response = None - # Apply request middleware for middleware_method in self._request_middleware: response = middleware_method(request) @@ -239,4 +241,3 @@ def get_script_name(environ): if script_url: return force_unicode(script_url[:-len(environ.get('PATH_INFO', ''))]) return force_unicode(environ.get('SCRIPT_NAME', u'')) - diff --git a/tests/regressiontests/middleware_exceptions/tests.py b/tests/regressiontests/middleware_exceptions/tests.py index 7c456bafb4..5fee9a747c 100644 --- a/tests/regressiontests/middleware_exceptions/tests.py +++ b/tests/regressiontests/middleware_exceptions/tests.py @@ -1,8 +1,9 @@ import sys -from django.test import TestCase +from django.conf import settings from django.core.signals import got_request_exception from django.http import HttpResponse +from django.test import TestCase class TestException(Exception): @@ -694,3 +695,19 @@ class BadMiddlewareTests(BaseMiddlewareExceptionTest): self.assert_middleware_usage(pre_middleware, True, True, True, False) self.assert_middleware_usage(bad_middleware, True, True, True, True) self.assert_middleware_usage(post_middleware, True, True, True, True) + + +_missing = object() +class RootUrlconfTests(TestCase): + def test_missing_root_urlconf(self): + try: + original_ROOT_URLCONF = settings.ROOT_URLCONF + del settings.ROOT_URLCONF + except AttributeError: + original_ROOT_URLCONF = _missing + self.assertRaises(AttributeError, + self.client.get, "/middleware_exceptions/view/" + ) + + if original_ROOT_URLCONF is not _missing: + settings.ROOT_URLCONF = original_ROOT_URLCONF