Module

compiler.statements.template_structure

Template structure statement compilation for Kida compiler.

Provides mixin for compiling template structure statements (block, include, from_import).

Uses inline TYPE_CHECKING declarations for host attributes. See: plan/rfc-mixin-protocol-typing.md

Classes

TemplateStructureMixin 4
Mixin for compiling template structure statements. Host attributes and cross-mixin dependencies ar…

Mixin for compiling template structure statements.

Host attributes and cross-mixin dependencies are declared via inline TYPE_CHECKING blocks.

Methods

Internal Methods 4
_compile_block 1 list[ast.stmt]
Compile {% block name %} ... {% endblock %. Generates: _append(_blocks.get('na…
def _compile_block(self, node: Any) -> list[ast.stmt]

Compile {% block name %} ... {% endblock %.

Generates: _append(_blocks.get('name', _block_name)(ctx, _blocks))

This allows child templates to override blocks by providing their own function in the _blocks dict.

Parameters
Name Type Description
node
Returns
list[ast.stmt]
_compile_include 1 list[ast.stmt]
Compile {% include "template.html" [with context] %. Generates: buf.append(_in…
def _compile_include(self, node: Any) -> list[ast.stmt]

Compile {% include "template.html" [with context] %.

Generates: buf.append(_include(template_name, ctx)) where _include is a helper function that loads and renders the template.

Parameters
Name Type Description
node
Returns
list[ast.stmt]
_compile_from_import 1 list[ast.stmt]
Compile {% from "template.html" import name1, name2 as alias %. Generates: …
def _compile_from_import(self, node: Any) -> list[ast.stmt]

Compile {% from "template.html" import name1, name2 as alias %.

Generates:

_imported = _import_macros(template_name, with_context, ctx)
ctx['name1'] = _imported['name1']
ctx['alias'] = _imported['name2']
Parameters
Name Type Description
node
Returns
list[ast.stmt]
_compile_import 1 list[ast.stmt]
Compile {% import "template.html" as f %. Generates: ctx['f'] = _import_macros…
def _compile_import(self, node: Any) -> list[ast.stmt]

Compile {% import "template.html" as f %.

Generates: ctx['f'] = _import_macros(template_name, with_context, ctx)

Parameters
Name Type Description
node
Returns
list[ast.stmt]