Tags Embutidas nos Templates no Django
O Django disponibiliza uma ampla gama de tags embutidas para templates, facilitando a renderização e manipulação de dados no frontend. A seguir, detalham-se as principais funcionalidades e usos dessas tags.
Tag autoescape
A tag autoescape
define o comportamento de escape automático para caracteres HTML em uma saída, garantindo maior segurança. Por padrão, certos caracteres são convertidos para suas entidades HTML correspondentes:
<
é convertido em<
&
é convertido em>
- Aspas simples
'
tornam-se'
- Aspas duplas
"
tornam-se"
&
é convertido em&
Considere o seguinte exemplo de template:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Exemplo Django</title>
</head>
<body>
{{ body }}
{% autoescape off %}
{{ body }}
{% endautoescape %}
</body>
</html>
No exemplo acima, o conteúdo da variável body
é exibido duas vezes: a primeira com escape automático e a segunda sem esse processamento, pois o bloco {% autoescape off %}
desativa a conversão automática.
A função de view que utiliza esse template poderia ser definida assim:
from django.shortcuts import render
def index(request):
return render(request, "index.html", context={"body": "<h1>Hello World!</h1>"})
Quando renderizado, o primeiro bloco body
exibirá o conteúdo da variável body
como texto literal, enquanto o segundo bloco exibirá o conteúdo como HTML.
Comentários
Em templates, a tag comment
permite inserir blocos ignorados na criação do HTML final. Todo o conteúdo entre {% comment %}
e {% endcomment %}
será descartado.
<body>
{% comment %}
Este texto será ignorado no HTML criado.
{% endcomment %}
{{ body }}
</body>
Isso é útil para adicionar notas ou comentários ao código sem que eles sejam exibidos no navegador.
Condicionais (if, else e elif)
A tag if
avalia condições e renderiza o conteúdo de acordo com o resultado. Um exemplo básico:
{% if n > 0 %}
<p>O número é positivo</p>
{% endif %}
Caso n
seja maior que zero, a mensagem será exibida. Adicionalmente, os blocos else
e elif
permitem lidar com outras condições:
{% if n > 0 %}
<p>O número é positivo</p>
{% elif n < 0 %}
<p>O número é negativo</p>
{% else %}
<p>O número é zero</p>
{% endif %}
Além disso, a tag suporta operadores como ==
, !=
, <
, >
, <=
, >=
, in
, not in
, is
e is not
, combinados com and
, or
e not
.
{% if n > 0 and n < 10 %}
<p>O número está entre 0 e 10</p>
{% endif %}
Loops (for)
A tag for
itera sobre coleções, como listas ou dicionários. Considere a seguinte função de view:
from django.shortcuts import render
def index(request):
langs = ["Python", "JavaScript", "Java", "C#", "C++"]
return render(request, "index.html", context={"langs": langs})
No template, os itens da lista podem ser iterados e exibidos:
<ul>
{% for lang in langs %}
<li>{{ lang }}</li>
{% endfor %}
</ul>
Se a coleção for vazia, a tag {% empty %}
pode exibir um conteúdo alternativo:
<ul>
{% for lang in langs %}
<li>{{ lang }}</li>
{% empty %}
<li>Não há linguagens disponíveis</li>
{% endfor %}
</ul>
Dicionários também podem ser iterados utilizando uma sintaxe semelhante:
from django.shortcuts import render
def index(request):
data = {"red": "vermelho", "green": "verde", "blue": "azul"}
return render(request, "index.html", context={"data": data})
Template:
{% for key, value in data.items %}
<p>{{ key }}: {{ value }}</p>
{% endfor %}
Definição de Variáveis
A tag {% with %}
permite definir variáveis temporárias dentro de um bloco, que estarão disponíveis apenas dentro desse escopo:
{% with name="Tom" age=25 %}
<div>
<p>Nome: {{ name }}</p>
<p>Idade: {{ age }}</p>
</div>
{% endwith %}
Exibição de Datas
A tag {% now %}
exibe a data e a hora atuais em um formato específico. Alguns exemplos comuns de formato:
Y
: ano completo (quatro dígitos)F
: nome completo do mêsj
: dia do mês
Todos os formatos disponíveis podem ser encontrados na documentação oficial do Django.
Exemplo no template:
<p>{% now "Y" %}</p>
<p>{% now "F j, Y" %}</p>
Por padrão, o Django utiliza o fuso horário definido na variável TIME_ZONE
no arquivo settings.py
. Caso necessário, o fuso horário pode ser ajustado. Por exemplo:
TIME_ZONE = 'America/Sao_Paulo'
Documentação oficial: