summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-03-03 00:41:40 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-03-03 00:41:40 +0000
commitedfed185811821a6d000f32d22fe398dfe3e0fe9 (patch)
tree8843346fee53a7ac5a75a68a21b487f124926b63
parent17bd34930a35f4097082ed3e2453d42d7d4f21a4 (diff)
Fixed #15502 -- Ensure that nested TemplateDoesNotExist errors are propegated with a meaningful error message when loaded using select_template. Thanks to jaylett for the report, and GDorn for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15717 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/template/loader.py7
-rw-r--r--tests/regressiontests/templates/templates/test_include_error.html1
-rw-r--r--tests/regressiontests/templates/tests.py32
3 files changed, 38 insertions, 2 deletions
diff --git a/django/template/loader.py b/django/template/loader.py
index 2fc1a7a3aa..98eddf24f2 100644
--- a/django/template/loader.py
+++ b/django/template/loader.py
@@ -191,12 +191,15 @@ def render_to_string(template_name, dictionary=None, context_instance=None):
def select_template(template_name_list):
"Given a list of template names, returns the first that can be loaded."
+ not_found = []
for template_name in template_name_list:
try:
return get_template(template_name)
- except TemplateDoesNotExist:
+ except TemplateDoesNotExist, e:
+ if e.args[0] not in not_found:
+ not_found.append(e.args[0])
continue
# If we get here, none of the templates could be loaded
- raise TemplateDoesNotExist(', '.join(template_name_list))
+ raise TemplateDoesNotExist(', '.join(not_found))
add_to_builtins('django.template.loader_tags')
diff --git a/tests/regressiontests/templates/templates/test_include_error.html b/tests/regressiontests/templates/templates/test_include_error.html
new file mode 100644
index 0000000000..6db959380e
--- /dev/null
+++ b/tests/regressiontests/templates/templates/test_include_error.html
@@ -0,0 +1 @@
+{% include "missing.html" %} \ No newline at end of file
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index fb47b27d90..c99081932a 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -237,6 +237,38 @@ class Templates(unittest.TestCase):
loader.template_source_loaders = old_loaders
settings.TEMPLATE_DEBUG = old_td
+
+ def test_include_missing_template(self):
+ """
+ Tests that the correct template is identified as not existing
+ when {% include %} specifies a template that does not exist.
+ """
+
+ # TEMPLATE_DEBUG must be true, otherwise the exception raised
+ # during {% include %} processing will be suppressed.
+ old_td, settings.TEMPLATE_DEBUG = settings.TEMPLATE_DEBUG, True
+ old_loaders = loader.template_source_loaders
+
+ try:
+ # Test the base loader class via the app loader. load_template
+ # from base is used by all shipped loaders excepting cached,
+ # which has its own test.
+ loader.template_source_loaders = (app_directories.Loader(),)
+
+ load_name = 'test_include_error.html'
+ r = None
+ try:
+ tmpl = loader.select_template([load_name])
+ r = tmpl.render(template.Context({}))
+ except template.TemplateDoesNotExist, e:
+ settings.TEMPLATE_DEBUG = old_td
+ self.assertEqual(e.args[0], 'missing.html')
+ self.assertEqual(r, None, 'Template rendering unexpectedly succeeded, produced: ->%r<-' % r)
+ finally:
+ loader.template_source_loaders = old_loaders
+ settings.TEMPLATE_DEBUG = old_td
+
+
def test_extends_include_missing_baseloader(self):
"""
Tests that the correct template is identified as not existing