summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tsouvarev <tsouvarev@gmail.com>2016-02-26 09:49:02 +0300
committerTim Graham <timograham@gmail.com>2016-02-26 08:02:34 -0500
commitcd46947ddb6719c819e75464d6aa0a10a6c10fad (patch)
tree146bab6b02ca963b1ec1aaf06222fc7778ae89e4
parent911a77fcca49a92d0750b7f7d573ea2dcf77a1a9 (diff)
downloaddjango-cd46947ddb6719c819e75464d6aa0a10a6c10fad.tar.gz
[1.9.x] Fixed #26280 -- Fixed cached template loader crash when loading nonexistent template.
Backport of 8890c533e0b53cb0021bd5faf15668430cd3075a from master
-rw-r--r--django/template/loaders/cached.py2
-rw-r--r--docs/releases/1.9.3.txt3
-rw-r--r--tests/template_tests/test_loaders.py12
3 files changed, 16 insertions, 1 deletions
diff --git a/django/template/loaders/cached.py b/django/template/loaders/cached.py
index c13346b961..5bf5c10586 100644
--- a/django/template/loaders/cached.py
+++ b/django/template/loaders/cached.py
@@ -131,7 +131,7 @@ class Loader(BaseLoader):
template_tuple = self.template_cache.get(key)
# A cached previous failure:
if template_tuple is TemplateDoesNotExist:
- raise TemplateDoesNotExist
+ raise TemplateDoesNotExist(template_name)
elif template_tuple is None:
template, origin = self.find_template(template_name, template_dirs)
if not hasattr(template, 'render'):
diff --git a/docs/releases/1.9.3.txt b/docs/releases/1.9.3.txt
index ef95681024..625899daa0 100644
--- a/docs/releases/1.9.3.txt
+++ b/docs/releases/1.9.3.txt
@@ -46,3 +46,6 @@ Bugfixes
* Changed the admin's "permission denied" message in the login template to use
``get_username`` instead of ``username`` to support custom user models
(:ticket:`26231`).
+
+* Fixed a crash when passing a nonexistent template name to the cached template
+ loader's ``load_template()`` method (:ticket:`26280`).
diff --git a/tests/template_tests/test_loaders.py b/tests/template_tests/test_loaders.py
index 3614793564..11f20c6deb 100644
--- a/tests/template_tests/test_loaders.py
+++ b/tests/template_tests/test_loaders.py
@@ -87,6 +87,18 @@ class CachedLoaderTests(SimpleTestCase):
"Cached loader failed to cache the TemplateDoesNotExist exception",
)
+ @ignore_warnings(category=RemovedInDjango20Warning)
+ def test_load_nonexistent_cached_template(self):
+ loader = self.engine.template_loaders[0]
+ template_name = 'nonexistent.html'
+
+ # fill the template cache
+ with self.assertRaises(TemplateDoesNotExist):
+ loader.find_template(template_name)
+
+ with self.assertRaisesMessage(TemplateDoesNotExist, template_name):
+ loader.get_template(template_name)
+
def test_templatedir_caching(self):
"""
#13573 -- Template directories should be part of the cache key.