浏览代码

Added further fixes, tests for #19949/f33db5a09a.

Thanks Susan Tan. Refs #19949.
Ramiro Morales 11 年之前
父节点
当前提交
b785a80d19
共有 2 个文件被更改,包括 13 次插入3 次删除
  1. 5 1
      django/template/loaders/cached.py
  2. 8 2
      tests/template_tests/test_loaders.py

+ 5 - 1
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:

+ 8 - 2
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):