Fixed #13684 -- if settings.ROOT_URLCONF isn't defined don't blow up with an UnboundLocalError.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14488 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2010-11-07 16:02:22 +00:00
parent 035cb99b47
commit 96cc7baf0c
2 changed files with 25 additions and 7 deletions

View File

@ -73,13 +73,15 @@ class BaseHandler(object):
from django.conf import settings from django.conf import settings
try: 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: try:
# Setup default url resolver for this thread.
urlconf = settings.ROOT_URLCONF
urlresolvers.set_urlconf(urlconf)
resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
response = None response = None
# Apply request middleware # Apply request middleware
for middleware_method in self._request_middleware: for middleware_method in self._request_middleware:
response = middleware_method(request) response = middleware_method(request)
@ -239,4 +241,3 @@ def get_script_name(environ):
if script_url: if script_url:
return force_unicode(script_url[:-len(environ.get('PATH_INFO', ''))]) return force_unicode(script_url[:-len(environ.get('PATH_INFO', ''))])
return force_unicode(environ.get('SCRIPT_NAME', u'')) return force_unicode(environ.get('SCRIPT_NAME', u''))

View File

@ -1,8 +1,9 @@
import sys import sys
from django.test import TestCase from django.conf import settings
from django.core.signals import got_request_exception from django.core.signals import got_request_exception
from django.http import HttpResponse from django.http import HttpResponse
from django.test import TestCase
class TestException(Exception): class TestException(Exception):
@ -694,3 +695,19 @@ class BadMiddlewareTests(BaseMiddlewareExceptionTest):
self.assert_middleware_usage(pre_middleware, True, True, True, False) self.assert_middleware_usage(pre_middleware, True, True, True, False)
self.assert_middleware_usage(bad_middleware, True, True, True, True) self.assert_middleware_usage(bad_middleware, True, True, True, True)
self.assert_middleware_usage(post_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