Browse Source

Fixed #36271 -- Raised TemplateSyntaxError when using a relative template path with an unknown origin.

YogyaChugh 1 week ago
parent
commit
7164f08047

+ 7 - 0
django/template/loader_tags.py

@@ -257,6 +257,13 @@ def construct_relative_path(
         # relative path.
         return relative_name
 
+    if current_template_name is None:
+        # Unknown origin (e.g. Template('...').render(Context({...})).
+        raise TemplateSyntaxError(
+            f"The relative path {relative_name} cannot be evaluated due to "
+            "an unknown template origin."
+        )
+
     new_name = posixpath.normpath(
         posixpath.join(
             posixpath.dirname(current_template_name.lstrip("/")),

+ 12 - 1
tests/template_tests/syntax_tests/test_exceptions.py

@@ -1,4 +1,4 @@
-from django.template import TemplateDoesNotExist, TemplateSyntaxError
+from django.template import Template, TemplateDoesNotExist, TemplateSyntaxError
 from django.test import SimpleTestCase
 
 from ..utils import setup
@@ -64,3 +64,14 @@ class ExceptionsTests(SimpleTestCase):
         """
         with self.assertRaises(TemplateSyntaxError):
             self.engine.render_to_string("exception05")
+
+    def test_unknown_origin_relative_path(self):
+        files = ["./nonexistent.html", "../nonexistent.html"]
+        for template_name in files:
+            with self.subTest(template_name=template_name):
+                msg = (
+                    f"The relative path '{template_name}' cannot be evaluated due to "
+                    "an unknown template origin."
+                )
+                with self.assertRaisesMessage(TemplateSyntaxError, msg):
+                    Template(f"{{% extends '{template_name}' %}}")