Filtros Embutidos nos Templates no Django
No Django, existem filtros que permitem realizar transformações simples nos valores diretamente nos templates. A seguir são apresentados alguns dos filtros mais comuns.
add
O filtro add soma um valor a outro. Exemplo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django</title>
</head>
<body>
<div>
{% with message="Hello" %}
<h2>{{ message|add:" Django" }}</h2>
{% endwith %}
</div>
</body>
</html>
Neste caso, a variável message
contém o valor "Hello"
. No momento da renderização, o filtro add
adiciona a string " Django"
, resultando em Hello Django
. Essa variável também poderia ser um dado recebido do contexto da view.
capfirst
O filtro capfirst
transforma a primeira letra de uma string em maiúscula.
{{ message|capfirst }}
Se o valor da variável message
for "django"
, o filtro produzirá "Django"
.
cut
O filtro cut
remove todas as ocorrências de uma substring específica em uma string.
{% with message="Eu estava em casa" %}
{{ message|cut:"estava" }}
{% endwith %}
Aqui, a substring "estava"
é eliminada da string original, resultando em "Eu em casa"
.
Verificação de valores e valores padrão
O filtro default
retorna um valor padrão caso o valor original seja avaliado como falso.
{% with isEnabled=False %}
{{ isEnabled|default:"desativado" }}
{% endwith %}
Como o valor de isEnabled
é False
, a saída será "desativado"
. Qualquer valor que seja avaliado como falso, como uma string vazia ou zero, também será substituído pelo valor padrão especificado.
O filtro default_if_none
tem uma função semelhante, mas é aplicado apenas quando o valor original é None
.
Exemplo:
{% with user=None %}
{{ user|default_if_none:"Indefinido" }}
{% endwith %}
Neste caso, o filtro retorna "Indefinido"
, pois o valor de user
é None
.
floatformat
O filtro floatformat
é usado para formatar números de ponto flutuante. Sem argumentos, ele arredonda o número para uma casa decimal.
Exemplo:
Valor | Template | Resultado |
---|---|---|
34.23234 | {{ value | floatformat }} | 34.2 |
34.00000 | {{ value | floatformat }} | 34 |
34.26000 | {{ value | floatformat }} | 34.3 |
Com um argumento numérico, o número é arredondado para o número de casas decimais especificado.
Valor | Template | Resultado |
---|---|---|
34.23234 | {{ value|floatformat:3 }} | 34.232 |
34.00000 | {{ value|floatformat:3 }} | 34.000 |
34.26000 | {{ value|floatformat:3 }} | 34.260 |
Se o argumento for negativo, zeros desnecessários na parte fracionária são removidos.
Valor | Template | Resultado |
---|---|---|
34.23234 | {{ value|floatformat:"-3" }} | 34.232 |
34.00000 | {{ value|floatformat:"-3" }} | 34 |
34.26000 | {{ value|floatformat:"-3" }} | 34.260 |
O argumento 0
arredonda o número para o inteiro mais próximo:
Valor | Template | Resultado |
---|---|---|
34.23234 | {{ value | floatformat : "0" }} | 34 |
34.00000 | {{ value | floatformat : "0" }} | 34 |
39.56000 | {{ value | floatformat : "0" }} | 40 |
Com o sufixo g
, o filtro aplica uma formatação com separadores de milhares, conforme a localidade configurada no projeto.
Valor | Template | Resultado |
---|---|---|
34232.34 | {{ value|floatformat:"2g" }} | 34,232.34 |
34232.06 | {{ value|floatformat:"g" }} | 34,232.1 |
34232.00 | {{ value|floatformat:"-3g" }} | 34,232 |
No arquivo settings.py
, a variável LANGUAGE_CODE
define a localidade. Por exemplo:
LANGUAGE_CODE = 'en-us'
Aqui, o separador decimal será um ponto e o de milhares será uma vírgula.
Formatação de Datas
O filtro date
permite formatar objetos do tipo datetime
em templates. Ele aceita especificadores para personalizar a exibição de datas e horários, de acordo com as necessidades do projeto.
Especificadores disponíveis:
d
: Dia do mês com dois dígitos (zero à esquerda se necessário). Exemplo:'01'
a'31'
.j
: Dia do mês sem zero à esquerda. Exemplo:'1'
a'31'
.D
: Dia da semana abreviado (três caracteres). Exemplo:'Fri'
.l
: Dia da semana por extenso. Exemplo:'Friday'
.S
: Sufixo ordinal em inglês para o dia do mês. Exemplo:'st'
,'nd'
,'rd'
,'th'
.w
: Número do dia da semana (domingo = 0, sábado = 6).z
: Número do dia no ano (de 1 a 366).W
: Número da semana no ano (a semana começa na segunda-feira). Exemplo:'1'
a'53'
.m
: Mês com dois dígitos. Exemplo:'01'
a'12'
.n
: Mês sem zero à esquerda. Exemplo:'1'
a'12'
.M
: Nome do mês abreviado (três caracteres). Exemplo:'Jan'
.b
: Nome do mês abreviado em letras minúsculas. Exemplo:'jan'
.E
: Nome do mês localizado. Exemplo em inglês:'January'
.F
: Nome do mês por extenso. Exemplo:'January'
.N
: Abreviação do mês com ponto. Exemplo:'Jan.'
,'Feb.'
.t
: Quantidade de dias no mês. Exemplo: 28 a 31.y
: Ano com dois dígitos. Exemplo:'00'
a'99'
.Y
: Ano com quatro dígitos. Exemplo:'0001'
a'9999'
.L
: Indica se o ano é bissexto (True ou False).o
: Ano conforme a numeração ISO-8601 da semana.g
: Hora em formato de 12 horas sem zero à esquerda. Exemplo:'1'
a'12'
.G
: Hora em formato de 24 horas sem zero à esquerda. Exemplo:'0'
a'23'
.h
: Hora em formato de 12 horas com zero à esquerda. Exemplo:'01'
a'12'
.H
: Hora em formato de 24 horas com zero à esquerda. Exemplo:'00'
a'23'
.i
: Minutos com dois dígitos. Exemplo:'00'
a'59'
.s
: Segundos com dois dígitos. Exemplo:'00'
a'59'
.u
: Microssegundos. Exemplo: 000000 a 999999.a
: Exibe'a.m.'
ou'p.m.'
.A
: Exibe'AM'
ou'PM'
.f
: Hora e minutos em formato de 12 horas. Exemplo:'1:30'
.P
: Hora e minutos em formato de 12 horas com'a.m.'
ou'p.m.'
. Exemplo:'12:30 p.m.'
.e
: Fuso horário. Exemplo:'GMT'
,'-500'
,'US/Eastern'
.O
: Diferença em relação ao horário de Greenwich. Exemplo:'+0200'
.T
: Abreviação do fuso horário local. Exemplo:'EST'
,'MDT'
.c
: Data e hora no formato ISO 8601. Exemplo:'2008-01-02T10:30:00.000123+02:00'
.r
: Data e hora no formato RFC 5322.
Também é possível usar constantes predefinidas, como DATE_FORMAT
, DATETIME_FORMAT
, SHORT_DATE_FORMAT
e SHORT_DATETIME_FORMAT
.
Vamos ver um exemplo de uso do filtro date
. No arquivo views.py
, uma data é passada para o template:
from datetime import datetime
from django.shortcuts import render
def index(request):
return render(request, "index.html", context={"my_date": datetime.now()})
No template, a data pode ser formatada da seguinte forma:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django Example</title>
</head>
<body>
<div>
<h2>{{ my_date|date:"d.m.Y" }}</h2>
<h2>{{ my_date|date:"H:i" }}</h2>
<h2>{{ my_date|date:"c" }}</h2>
<h2>{{ my_date|date:"SHORT_DATE_FORMAT" }}</h2>
</div>
</body>
</html>
Operações com Listas
O Django também oferece filtros específicos para trabalhar com listas.
join
O filtro join
converte os elementos de uma lista em uma string, utilizando o separador especificado.
{{ users|join:", " }}
Se a variável users for a lista ["Tom", "Sam", "Bob", "Mike"]
, o resultado será a string "Tom, Sam, Bob, Mike"
.
slice
O filtro slice
extrai uma parte da lista. Ele aceita índices inicial e final para determinar o intervalo desejado.
Exemplo:
{{ users|slice:"1:3" }}
Aqui, são extraídos os elementos entre os índices 1
e 3
(não inclusivo). Se users for a lista ["Tom", "Sam", "Bob", "Mike"]
, o resultado será ["Sam", "Bob"]
.
length
O filtro length
retorna o tamanho de uma lista ou string.
Exemplo:
{{ users|length }}
Se users for a lista ["Tom", "Sam", "Bob", "Mike"]
, o resultado será 4
.
Documentação oficial: