From 7164f080474ef0213d1d6e625db647c45c36a5fb Mon Sep 17 00:00:00 2001 From: YogyaChugh Date: Sat, 22 Mar 2025 18:13:26 +0530 Subject: [PATCH] Fixed #36271 -- Raised TemplateSyntaxError when using a relative template path with an unknown origin. --- django/template/loader_tags.py | 7 +++++++ .../template_tests/syntax_tests/test_exceptions.py | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/django/template/loader_tags.py b/django/template/loader_tags.py index 36703b4782..c3eb66b577 100644 --- a/django/template/loader_tags.py +++ b/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("/")), diff --git a/tests/template_tests/syntax_tests/test_exceptions.py b/tests/template_tests/syntax_tests/test_exceptions.py index b6d86ac42b..57c4fdb5e6 100644 --- a/tests/template_tests/syntax_tests/test_exceptions.py +++ b/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}' %}}")