Browse Source

Fixed #26109 -- Raised a helpful error if loader.select_tamplate() is passed a string.

Ahmed Mohamed 9 years ago
parent
commit
229488c8a1
2 changed files with 16 additions and 0 deletions
  1. 7 0
      django/template/loader.py
  2. 9 0
      tests/template_loader/tests.py

+ 7 - 0
django/template/loader.py

@@ -33,6 +33,13 @@ def select_template(template_name_list, using=None):
 
     Raises TemplateDoesNotExist if no such template exists.
     """
+    if isinstance(template_name_list, six.string_types):
+        raise TypeError(
+            'select_template() takes an iterable of template names but got a '
+            'string: %r. Use get_template() if you want to load a single '
+            'template by name.' % template_name_list
+        )
+
     chain = []
     engines = _engine_list(using)
     for template_name in template_name_list:

+ 9 - 0
tests/template_loader/tests.py

@@ -60,6 +60,15 @@ class TemplateLoaderTests(SimpleTestCase):
         with self.assertRaises(TemplateDoesNotExist):
             select_template([])
 
+    def test_select_template_string(self):
+        with self.assertRaisesMessage(
+            TypeError,
+            "select_template() takes an iterable of template names but got a "
+            "string: 'template_loader/hello.html'. Use get_template() if you "
+            "want to load a single template by name."
+        ):
+            select_template('template_loader/hello.html')
+
     def test_select_template_not_found(self):
         with self.assertRaises(TemplateDoesNotExist) as e:
             select_template(["template_loader/unknown.html",