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

Method visit_Block

src/jinja2/compiler.py:951–998  ·  view source on GitHub ↗

Call a block and register it for the template.

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

Source from the content-addressed store, hash-verified

949 self.writeline(f"debug_info = {debug_kv_str!r}")
950
951 def visit_Block(self, node: nodes.Block, frame: Frame) -> None:
952 """Call a block and register it for the template."""
953 level = 0
954 if frame.toplevel:
955 # if we know that we are a child template, there is no need to
956 # check if we are one
957 if self.has_known_extends:
958 return
959 if self.extends_so_far > 0:
960 self.writeline("if parent_template is None:")
961 self.indent()
962 level += 1
963
964 if node.scoped:
965 context = self.derive_context(frame)
966 else:
967 context = self.get_context_ref()
968
969 if node.required:
970 self.writeline(f"if len(context.blocks[{node.name!r}]) <= 1:", node)
971 self.indent()
972 self.writeline(
973 f'raise TemplateRuntimeError("Required block {node.name!r} not found")',
974 node,
975 )
976 self.outdent()
977
978 if not self.environment.is_async and frame.buffer is None:
979 self.writeline(
980 f"yield from context.blocks[{node.name!r}][0]({context})", node
981 )
982 else:
983 self.writeline(f"gen = context.blocks[{node.name!r}][0]({context})")
984 self.writeline("try:")
985 self.indent()
986 self.writeline(
987 f"{self.choose_async()}for event in gen:",
988 node,
989 )
990 self.indent()
991 self.simple_write("event", frame)
992 self.outdent()
993 self.outdent()
994 self.writeline(
995 f"finally: {self.choose_async('await gen.aclose()', 'gen.close()')}"
996 )
997
998 self.outdent(level)
999
1000 def visit_Extends(self, node: nodes.Extends, frame: Frame) -> None:
1001 """Calls the extender."""

Callers

nothing calls this directly

Calls 7

writelineMethod · 0.95
indentMethod · 0.95
derive_contextMethod · 0.95
get_context_refMethod · 0.95
outdentMethod · 0.95
choose_asyncMethod · 0.95
simple_writeMethod · 0.95

Tested by

no test coverage detected