diff --git a/src/jinja2/compiler.py b/src/jinja2/compiler.py index a4ff6a1b1..f7437f686 100644 --- a/src/jinja2/compiler.py +++ b/src/jinja2/compiler.py @@ -1092,7 +1092,11 @@ def loop_body() -> None: ) loop_body() else: - self.writeline("yield from template._get_default_module()._body_stream") + if frame.buffer is None: + self.writeline("yield from template._get_default_module()._body_stream") + else: + self.writeline("for event in template._get_default_module()._body_stream:") + loop_body() if node.ignore_missing: self.outdent() diff --git a/tests/test_imports.py b/tests/test_imports.py index b59fb49dd..7e61da464 100644 --- a/tests/test_imports.py +++ b/tests/test_imports.py @@ -195,6 +195,18 @@ def test_unoptimized_scopes(self, test_env): ) assert t.render().strip() == "(FOO)" + def test_include_without_context_inside_macro(self, test_env): + test_env.loader.mapping["included"] = "foo" + t = test_env.from_string( + """ + {%- macro foo() %} + {%- include "included" without context %} + {%- endmacro %} + {{- foo() -}} + """ + ) + assert t.render() == "foo" + def test_import_from_with_context(self): env = Environment( loader=DictLoader({"a": "{% macro x() %}{{ foobar }}{% endmacro %}"})