Atualizado: 14/12/2024

Tags Embutidas nos Templates - 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 &lt;

  • & é convertido em &gt;

  • Aspas simples ' tornam-se &#x27;

  • Aspas duplas " tornam-se &quot;

  • & é convertido em &amp;

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.

Navegador exibindo a diferença com uso de autoescape e sem retornados pelo servidor Django

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>
Navegador exibindo uma lista com uso da tag for no template retornado pelo servidor Django

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ês

  • j: 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:

Navegador exibindo datas inseridas no template pelo servidor Django
TIME_ZONE = 'America/Sao_Paulo'
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com