diff --git a/django/template/loaders/cached.py b/django/template/loaders/cached.py index 0429d7f9e6..67cec49c74 100644 --- a/django/template/loaders/cached.py +++ b/django/template/loaders/cached.py @@ -37,6 +37,9 @@ class Loader(BaseLoader): return template_name def find_template(self, name, dirs=None): + """ + Helper method. Lookup the template :param name: in all the configured loaders + """ key = self.cache_key(name, dirs) try: result = self.find_template_cache[key] @@ -53,12 +56,13 @@ class Loader(BaseLoader): if result: return result else: + self.template_cache[key] = TemplateDoesNotExist raise TemplateDoesNotExist(name) def load_template(self, template_name, template_dirs=None): key = self.cache_key(template_name, template_dirs) template_tuple = self.template_cache.get(key) - # cached a previous failure: + # A cached previous failure: if template_tuple is TemplateDoesNotExist: raise TemplateDoesNotExist elif template_tuple is None: diff --git a/tests/template_tests/test_loaders.py b/tests/template_tests/test_loaders.py index 7caadcd9a5..9d15b95d4b 100644 --- a/tests/template_tests/test_loaders.py +++ b/tests/template_tests/test_loaders.py @@ -129,13 +129,19 @@ class CachedLoader(unittest.TestCase): self.assertNotEqual(t1.render(Context({})), t2.render(Context({}))) def test_missing_template_is_cached(self): - "Check that the missing template is cached." + "#19949 -- Check that the missing template is cached." template_loader = loader.find_template_loader(settings.TEMPLATE_LOADERS[0]) # Empty cache, which may be filled from previous tests. template_loader.reset() - # Check that 'missing.html' isn't already in cache before 'missing.html' is loaed + # Check that 'missing.html' isn't already in cache before 'missing.html' is loaded self.assertRaises(KeyError, lambda: template_loader.template_cache["missing.html"]) + # Try to load it, it should fail self.assertRaises(TemplateDoesNotExist, template_loader.load_template, "missing.html") + # Verify that the fact that the missing template, which hasn't been found, has actually + # been cached: + self.assertEqual(template_loader.template_cache.get("missing.html"), + TemplateDoesNotExist, + "Cached template loader doesn't cache file lookup misses. It should.") class RenderToStringTest(unittest.TestCase):