3.4 KiB
Templates
Você pode usar qualquer template engine com o FastAPI.
Uma escolha comum é o Jinja2, o mesmo usado pelo Flask e outras ferramentas.
Existem utilitários para configurá-lo facilmente que você pode usar diretamente em sua aplicação FastAPI (fornecidos pelo Starlette).
Instalação de dependências
Para instalar o jinja2, siga o código abaixo:
$ pip install jinja2
Usando Jinja2Templates
- Importe
Jinja2Templates. - Crie um
templatesque você possa reutilizar posteriormente. - Declare um parâmetro
Requestno path operation que retornará um template. - Use o
templateque você criou para renderizar e retornar umaTemplateResponse, passe o nome do template, o request object, e um "context" dict com pares chave-valor a serem usados dentro do template do Jinja2.
{!../../../docs_src/templates/tutorial001.py!}
!!! note
Antes do FastAPI 0.108.0, Starlette 0.29.0, name era o primeiro parâmetro.
Além disso, em versões anteriores, o objeto `request` era passado como parte dos pares chave-valor no "context" dict para o Jinja2.
!!! tip "Dica"
Ao declarar response_class=HTMLResponse, a documentação entenderá que a resposta será HTML.
!!! note "Detalhes Técnicos"
Você também poderia usar from starlette.templating import Jinja2Templates.
**FastAPI** fornece o mesmo `starlette.templating` como `fastapi.templating` apenas como uma conveniência para você, o desenvolvedor. Mas a maioria das respostas disponíveis vêm diretamente do Starlette. O mesmo acontece com `Request` e `StaticFiles`.
Escrevendo Templates
Então você pode escrever um template em templates/item.html, por exemplo:
{!../../../docs_src/templates/templates/item.html!}
Interpolação de Valores no Template
No código HTML que contém:
{% raw %}
Item ID: {{ id }}
{% endraw %}
...aparecerá o id obtido do "context" dict que você passou:
{"id": id}
Por exemplo, dado um ID de valor 42, aparecerá:
Item ID: 42
Argumentos do url_for
Você também pode usar url_for() dentro do template, ele recebe como argumentos os mesmos argumentos que seriam usados pela sua path operation function.
Logo, a seção com:
{% raw %}
<a href="{{ url_for('read_item', id=id) }}">
{% endraw %}
...irá gerar um link para a mesma URL que será tratada pela path operation function read_item(id=id).
Por exemplo, com um ID de 42, isso renderizará:
<a href="/items/42">
Templates e Arquivos Estáticos
Você também pode usar url_for() dentro do template e usá-lo, por examplo, com o StaticFiles que você montou com o name="static".
{!../../../docs_src/templates/templates/item.html!}
Neste exemplo, ele seria vinculado a um arquivo CSS em static/styles.css com:
{!../../../docs_src/templates/static/styles.css!}
E como você está usando StaticFiles, este arquivo CSS será automaticamente servido pela sua aplicação FastAPI na URL /static/styles.css.
Mais detalhes
Para obter mais detalhes, incluindo como testar templates, consulte a documentação da Starlette sobre templates.