Fixed #9005: don't wig out when reversing a URL if SETTINGS_MODULE isn't set. While I was there, I fixed #10599 by re-raising the original error message, which is almost always a better idea. Thanks, Eric
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10350 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
dc832d7753
commit
624caace17
|
@ -323,7 +323,7 @@ def setup_environ(settings_mod, original_settings_path=None):
|
||||||
else:
|
else:
|
||||||
os.environ['DJANGO_SETTINGS_MODULE'] = '%s.%s' % (project_name, settings_name)
|
os.environ['DJANGO_SETTINGS_MODULE'] = '%s.%s' % (project_name, settings_name)
|
||||||
|
|
||||||
# Import the project module. We add the parent directory to PYTHONPATH to
|
# Import the project module. We add the parent directory to PYTHONPATH to
|
||||||
# avoid some of the path errors new users can have.
|
# avoid some of the path errors new users can have.
|
||||||
sys.path.append(os.path.join(project_directory, os.pardir))
|
sys.path.append(os.path.join(project_directory, os.pardir))
|
||||||
project_module = import_module(project_name)
|
project_module = import_module(project_name)
|
||||||
|
|
|
@ -370,14 +370,21 @@ class URLNode(Node):
|
||||||
url = ''
|
url = ''
|
||||||
try:
|
try:
|
||||||
url = reverse(self.view_name, args=args, kwargs=kwargs)
|
url = reverse(self.view_name, args=args, kwargs=kwargs)
|
||||||
except NoReverseMatch:
|
except NoReverseMatch, e:
|
||||||
project_name = settings.SETTINGS_MODULE.split('.')[0]
|
if settings.SETTINGS_MODULE:
|
||||||
try:
|
project_name = settings.SETTINGS_MODULE.split('.')[0]
|
||||||
url = reverse(project_name + '.' + self.view_name,
|
try:
|
||||||
|
url = reverse(project_name + '.' + self.view_name,
|
||||||
args=args, kwargs=kwargs)
|
args=args, kwargs=kwargs)
|
||||||
except NoReverseMatch:
|
except NoReverseMatch:
|
||||||
|
if self.asvar is None:
|
||||||
|
# Re-raise the original exception, not the one with
|
||||||
|
# the path relative to the project. This makes a
|
||||||
|
# better error message.
|
||||||
|
raise e
|
||||||
|
else:
|
||||||
if self.asvar is None:
|
if self.asvar is None:
|
||||||
raise
|
raise e
|
||||||
|
|
||||||
if self.asvar:
|
if self.asvar:
|
||||||
context[self.asvar] = url
|
context[self.asvar] = url
|
||||||
|
|
|
@ -153,6 +153,21 @@ class Templates(unittest.TestCase):
|
||||||
split = token.split_contents()
|
split = token.split_contents()
|
||||||
self.assertEqual(split, ["sometag", '_("Page not found")', 'value|yesno:_("yes,no")'])
|
self.assertEqual(split, ["sometag", '_("Page not found")', 'value|yesno:_("yes,no")'])
|
||||||
|
|
||||||
|
def test_url_reverse_no_settings_module(self):
|
||||||
|
#Regression test for #9005
|
||||||
|
from django.template import Template, Context, TemplateSyntaxError
|
||||||
|
old_settings_module = settings.SETTINGS_MODULE
|
||||||
|
settings.SETTINGS_MODULE = None
|
||||||
|
t = Template('{% url will_not_match %}')
|
||||||
|
c = Context()
|
||||||
|
try:
|
||||||
|
rendered = t.render(c)
|
||||||
|
except TemplateSyntaxError, e:
|
||||||
|
#Assert that we are getting the template syntax error and not the
|
||||||
|
#string encoding error.
|
||||||
|
self.assertEquals(e.message, "Caught an exception while rendering: Reverse for 'will_not_match' with arguments '()' and keyword arguments '{}' not found.")
|
||||||
|
settings.SETTINGS_MODULE = old_settings_module
|
||||||
|
|
||||||
def test_templates(self):
|
def test_templates(self):
|
||||||
template_tests = self.get_template_tests()
|
template_tests = self.get_template_tests()
|
||||||
filter_tests = filters.get_filter_tests()
|
filter_tests = filters.get_filter_tests()
|
||||||
|
|
Loading…
Reference in New Issue