MCPcopy
hub / github.com/pallets/jinja / visit_Include

Method visit_Include

src/jinja2/compiler.py:1042–1098  ·  src/jinja2/compiler.py::CodeGenerator.visit_Include

Handles includes.

(self, node: nodes.Include, frame: Frame)

Source from the content-addressed store, hash-verified

1040 self.extends_so_far += 1
1041
1042 def visit_Include(self, node: nodes.Include, frame: Frame) -> None:
1043 class="st">""class="st">"Handles includes."class="st">""
1044 if node.ignore_missing:
1045 self.writeline(class="st">"try:")
1046 self.indent()
1047
1048 func_name = class="st">"get_or_select_template"
1049 if isinstance(node.template, nodes.Const):
1050 if isinstance(node.template.value, str):
1051 func_name = class="st">"get_template"
1052 elif isinstance(node.template.value, (tuple, list)):
1053 func_name = class="st">"select_template"
1054 elif isinstance(node.template, (nodes.Tuple, nodes.List)):
1055 func_name = class="st">"select_template"
1056
1057 self.writeline(fclass="st">"template = environment.{func_name}(", node)
1058 self.visit(node.template, frame)
1059 self.write(fclass="st">", {self.name!r})")
1060 if node.ignore_missing:
1061 self.outdent()
1062 self.writeline(class="st">"except TemplateNotFound:")
1063 self.indent()
1064 self.writeline(class="st">"pass")
1065 self.outdent()
1066 self.writeline(class="st">"else:")
1067 self.indent()
1068
1069 def loop_body() -> None:
1070 self.indent()
1071 self.simple_write(class="st">"event", frame)
1072 self.outdent()
1073
1074 if node.with_context:
1075 self.writeline(
1076 fclass="st">"gen = template.root_render_func("
1077 class="st">"template.new_context(context.get_all(), True,"
1078 fclass="st">" {self.dump_local_context(frame)}))"
1079 )
1080 self.writeline(class="st">"try:")
1081 self.indent()
1082 self.writeline(fclass="st">"{self.choose_async()}for event in gen:")
1083 loop_body()
1084 self.outdent()
1085 self.writeline(
1086 fclass="st">"finally: {self.choose_async(&class="cm">#x27;await gen.aclose()', 'gen.close()')}"
1087 )
1088 elif self.environment.is_async:
1089 self.writeline(
1090 class="st">"for event in (await template._get_default_module_async())"
1091 class="st">"._body_stream:"
1092 )
1093 loop_body()
1094 else:
1095 self.writeline(class="st">"yield from template._get_default_module()._body_stream")
1096
1097 if node.ignore_missing:
1098 self.outdent()
1099

Callers

nothing calls this directly

Calls 7

writelineMethod · 0.95
indentMethod · 0.95
writeMethod · 0.95
outdentMethod · 0.95
dump_local_contextMethod · 0.95
choose_asyncMethod · 0.95
visitMethod · 0.80

Tested by

no test coverage detected