summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/management/__init__.py2
-rw-r--r--django/template/defaulttags.py21
-rw-r--r--tests/regressiontests/templates/tests.py15
3 files changed, 30 insertions, 8 deletions
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py
index 593e678008..21fad3fc51 100644
--- a/django/core/management/__init__.py
+++ b/django/core/management/__init__.py
@@ -325,7 +325,7 @@ def setup_environ(settings_mod, original_settings_path=None):
else:
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.
sys.path.append(os.path.join(project_directory, os.pardir))
project_module = __import__(project_name, {}, {}, [''])
diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py
index 8182cd4d8c..342d1fb34a 100644
--- a/django/template/defaulttags.py
+++ b/django/template/defaulttags.py
@@ -371,15 +371,22 @@ class URLNode(Node):
url = ''
try:
url = reverse(self.view_name, args=args, kwargs=kwargs)
- except NoReverseMatch:
- project_name = settings.SETTINGS_MODULE.split('.')[0]
- try:
- url = reverse(project_name + '.' + self.view_name,
+ except NoReverseMatch, e:
+ if settings.SETTINGS_MODULE:
+ project_name = settings.SETTINGS_MODULE.split('.')[0]
+ try:
+ url = reverse(project_name + '.' + self.view_name,
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:
- raise
-
+ raise e
+
if self.asvar:
context[self.asvar] = url
return ''
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index f1b5a9ed28..e119996974 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -149,6 +149,21 @@ class Templates(unittest.TestCase):
split = token.split_contents()
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):
template_tests = self.get_template_tests()
filter_tests = filters.get_filter_tests()