Jinja

Provê suporte para templates Jinja

Utilização

Primeiro instale o extra jinja:

$ pip install zayt[jinja]

Ative o módulo no arquivo de configuração:

settings.py
settings = {
    "modules": [
        "zayt.ext.jinja",
    ],
}

Injeto o serviço JinjaTemplate e invoque o método respond():

application.py
from zayt.ext.jinja import JinjaTemplate
from zayt.web import get

@get
async def index(request, template: JinjaTemplate):
    context = {"title": "Index"}
    await template.respond(request, "index.html", context)
resources/templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja Templates</title>
</head>
<body>
    <h1>{{ title }}</h1>
</body>
</html>

Renderizar templates para string

A classe JinjaTemplate provê métodos para renderizar templates para um str ao invés de renderizar para a resposta.

O método render() aceita um nome de template e retorna uma string com o template renderizado.

O método render_str() aceita uma string de template, a compila e retorna o resultado.

template.render("template.html", {"variable": "value"})
template.render_str("{{ variable }}", {"variable": "value"})

Configuração

Jinja pode ser configurado através do settings.py. Por exemplo, para ativar extensões do Jinja:

settings.py
settings = {
    "extensions": ["zayt.ext.jinja"],
    "jinja": {
        "entensions": [
            "jinja2.ext.i18n",
            "jinja2.ext.debug",
        ],
    },
}

As opções disponíveis são exibidas abaixo:

settings = {
    "jinja": {
        "loader: {
            "searchpath": [
                "resources/templates"
            ],
            "encoding": "utf-8",
            "followlinks": False,
        },
        # "loader": loader_instance,
        "block_start_string": "",
        "block_end_string": "",
        "variable_start_string": "",
        "variable_end_string": "",
        "comment_start_string": "",
        "comment_end_string": "",
        "line_statement_prefix": "",
        "line_comment_prefix": "",
        "trim_blocks": True,
        "lstrip_blocks": True,
        "newline_sequence": "\n", # "\r\n", "\r"
        "keep_trailing_newline": True,
        "extensions": [
          "extension1",
          "extension2",
        ],
        "optimized": True,
        "undefined": SomeClass,
        "finalize": some_function,
        "autoescape": some_function,
        "cache_size": 1,
        "auto_reload": True,
        "bytecode_cache": cache_instance
    },
}

Nota

As opções são descritas em jinja2.Environment.

Nota

A opção loader pode ser uma intância de jinja2.BaseLoader ou um dict.