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.