Call a block and register it for the template.
(self, node: nodes.Block, frame: Frame)
| 942 | self.writeline(f"debug_info = {debug_kv_str!r}") |
| 943 | |
| 944 | def visit_Block(self, node: nodes.Block, frame: Frame) -> None: |
| 945 | """Call a block and register it for the template.""" |
| 946 | level = 0 |
| 947 | if frame.toplevel: |
| 948 | # if we know that we are a child template, there is no need to |
| 949 | # check if we are one |
| 950 | if self.has_known_extends: |
| 951 | return |
| 952 | if self.extends_so_far > 0: |
| 953 | self.writeline("if parent_template is None:") |
| 954 | self.indent() |
| 955 | level += 1 |
| 956 | |
| 957 | if node.scoped: |
| 958 | context = self.derive_context(frame) |
| 959 | else: |
| 960 | context = self.get_context_ref() |
| 961 | |
| 962 | if node.required: |
| 963 | self.writeline(f"if len(context.blocks[{node.name!r}]) <= 1:", node) |
| 964 | self.indent() |
| 965 | self.writeline( |
| 966 | f'raise TemplateRuntimeError("Required block {node.name!r} not found")', |
| 967 | node, |
| 968 | ) |
| 969 | self.outdent() |
| 970 | |
| 971 | if not self.environment.is_async and frame.buffer is None: |
| 972 | self.writeline( |
| 973 | f"yield from context.blocks[{node.name!r}][0]({context})", node |
| 974 | ) |
| 975 | else: |
| 976 | self.writeline( |
| 977 | f"{self.choose_async()}for event in" |
| 978 | f" context.blocks[{node.name!r}][0]({context}):", |
| 979 | node, |
| 980 | ) |
| 981 | self.indent() |
| 982 | self.simple_write("event", frame) |
| 983 | self.outdent() |
| 984 | |
| 985 | self.outdent(level) |
| 986 | |
| 987 | def visit_Extends(self, node: nodes.Extends, frame: Frame) -> None: |
| 988 | """Calls the extender.""" |
nothing calls this directly
no test coverage detected