Django template language (DTL)
Django template language (recurso de modelo integrado) é a linguagem de templates nativa do Django, projetada para permitir que desenvolvedores criem páginas dinâmicas usando HTML com variáveis, controle de fluxo (como loops e condicionais) e filtros. Ela facilita a integração de dados do backend nas páginas da web e segue uma sintaxe simples e segura, evitando a execução de código diretamente no template.
A chave dupla em DTL serve para receber valor de variaveis {{ variavel }}. Em DTL não se usa notação comum do python para acessar um dicionario dicionario['chave'] usa-se o ponto. Ex.: {{dicionario.chave}}
| DTL
A views envia dados dinamicos para página HTML antes de renderizar.
from django.shortcuts import render
def lista_tarefas(request):
tarefas = ["Comprar leite", "Estudar Django", "Fazer exercícios"]
return render(request, "meu_app/tarefas.html", {
"tarefas": tarefas,
"titulo": "Minhas tarefas",
})
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Lista de Tarefas</title>
</head>
<body>
<h1>{{titulo}}</h1>
{% if tarefas %}
<ul>
{% for tarefa in tarefas %}
<li>{{ tarefa }}</li>
{% endfor %}
</ul>
{% else %}
<p>Nenhuma tarefa pendente!</p>
{% endif %}
</body>
</html>
Filtros DTL
É uma função aplicada em uma expressão no template para formatar ou transformar seu valor antes que ele seja exibido. Os filtros são usados na linguagem de templates do Django (DTL) para modificar ou manipular dados diretamente no template, tornando o código mais limpo e funcional.
Alguns Filtros Comuns:
| Filtro | Descrição | Exemplo de Uso | Saída |
|---|---|---|---|
| {{ nome|lower }} | Converte o texto para letras minúsculas. | {{ "Django"|lower }} | django |
| {{ valor|default:"N/A" }} | Retorna um valor padrão ("N/A") caso a variável seja None ou vazia. |
{{ valor|default:"N/A" }} onde valor=None |
N/A |
| {{ data|date:"d/m/Y" }} | Formata uma data para o padrão brasileiro (ex.: 31/12/2024) |
.{{ data|date:"d/m/Y" }} onde data=2024-12-31 |
31/12/2024 |
| {{ lista|length }} | Retorna o número de itens de uma lista ou o número de caracteres de uma string. | {{ lista|length }} onde lista=[1,2,3] |
3 |
| {{ nome|add:"_nome" }} | Concatena uma variável com o texto fornecido no filtro. | {{ "usuario"|add:"_nome" }} | usuario_nome |
Tags DTL
Tags no Django Template Language (DTL) são construções especiais que executam lógica dentro dos templates.
Quando você tem um arquivo HTML com tags do Django (como {% extends %}, {% include %}, {% block %}), o Django processa essas tags primeiro, Depois que o Django termina de processar suas tags, o resultado é enviado para o navegador como HTML puro.
Exemplo de tags DTL comuns:
| Tag | Descrição | Exemplo de Uso |
|---|---|---|
{% if %} ... {% endif %} |
Exibe conteúdo condicionalmente, baseado em uma condição lógica. | {% if user.is_authenticated %} Bem-vindo, {{ user.username }} {% endif %} |
{% for %} ... {% endfor %} |
Itera sobre uma lista ou coleção para exibir itens repetidamente. | {% for item in lista %} {{ item }} {% endfor %} |
{% block %} ... {% endblock %} |
Define blocos substituíveis nos templates filhos ao usar herança de templates. | {% block content %} Conteúdo aqui {% endblock %} |
{% extends %} |
Define qual template pai será usado para herança, permitindo reaproveitar uma estrutura comum. | {% extends "base.html" %} |
{% include %} |
Insere outro template dentro do atual, ideal para componentes reutilizáveis como headers ou footers. | {% include "header.html" %} |
{% csrf_token %} |
Gera um token de segurança para proteger formulários contra ataques CSRF (Cross-Site Request Forgery). | <form> {% csrf_token %} </form> |
{% url %} |
Gera URLs dinâmicas com base no nome de uma rota definida em urls.py. | <a href="{% url 'nome_da_rota' %}">Link</a> |
{% with %} ... {% endwith %} |
Define um contexto temporário para variáveis, útil para simplificar expressões longas ou reutilizar valores. |
|
{% comment %} ... {% endcomment %} |
Adiciona comentários no template que não serão exibidos no HTML final. | {% comment %} Este é um comentário {% endcomment %} |
{% now "formato" %} |
Exibe a data e hora atuais em um formato específico, como YYYY-MM-DD. | {% now "Y-m-d H:i" %} |
tag url (pode ser usada para substituir a função reverse() do django) {%url "nome-url" url-seguinte %} O primeiro argumento é o nome da view (para qual queremos gerar a url dinamicamente), e é definido na função path dentro do arquivo urls.py com o parâmetro name. Qualquer argumento adicional depois do nome da view representa parâmetros dinâmicos que a URL espera.