Template Filters
I template filter di Django permettono di trasformare e formattare le variabili direttamente nel template. Si applicano usando il carattere pipe | dopo la variabile: {{ variabile|filtro }}.
Sintassi Base
I filtri si concatenano e possono accettare argomenti separati da ::
{{ nome|lower }}
{{ testo|truncatewords:20 }}
{{ data|date:"d/m/Y" }}
Filtro date
Formatta oggetti data e datetime secondo il formato specificato:
{{ articolo.data_pubblicazione|date:"d F Y" }}
<!-- Output: 06 Febbraio 2026 -->
{{ adesso|date:"H:i" }}
<!-- Output: 14:30 -->
Filtro default
Mostra un valore predefinito se la variabile e vuota o None:
{{ biografia|default:"Nessuna biografia disponibile." }}
{{ punteggio|default_if_none:"N/D" }}
Filtro length
Restituisce la lunghezza di una stringa o lista:
<p>Hai {{ messaggi|length }} messaggi.</p>
{% if prodotti|length_is:"0" %}
<p>Nessun prodotto trovato.</p>
{% endif %}
Filtro truncatewords e truncatechars
Tronca il testo a un numero specifico di parole o caratteri:
{{ descrizione|truncatewords:15 }}
<!-- Tronca a 15 parole, aggiungendo "..." -->
{{ titolo|truncatechars:50 }}
<!-- Tronca a 50 caratteri -->
Filtro join
Unisce gli elementi di una lista con un separatore:
{{ tags|join:", " }}
<!-- Output: python, django, web -->
Filtri safe e escape
Il filtro safe disabilita lâauto-escaping per mostrare HTML grezzo. Il filtro escape forza lâescaping:
{{ contenuto_html|safe }}
<!-- Renderizza l'HTML contenuto nella variabile -->
{{ input_utente|escape }}
<!-- Converte < > & in entita HTML -->
Filtro linebreaks
Converte le interruzioni di riga in tag HTML <p> e <br>:
{{ testo_multiriga|linebreaks }}
<!-- Avvolge i paragrafi in <p> e le righe singole in <br> -->
{{ testo_multiriga|linebreaksbr }}
<!-- Converte solo in <br>, senza <p> -->
Filtro dictsort
Ordina una lista di dizionari per una chiave specifica:
{% for studente in studenti|dictsort:"cognome" %}
<p>{{ studente.cognome }}, {{ studente.nome }}</p>
{% endfor %}
{% for studente in studenti|dictsortreversed:"voto" %}
<p>{{ studente.nome }}: {{ studente.voto }}</p>
{% endfor %}
Altri Filtri Utili
{{ nome|upper }} <!-- Tutto maiuscolo -->
{{ nome|lower }} <!-- Tutto minuscolo -->
{{ nome|title }} <!-- Prima lettera maiuscola per parola -->
{{ nome|capfirst }} <!-- Prima lettera maiuscola -->
{{ prezzo|floatformat:2 }} <!-- Formatta decimali: 19.90 -->
{{ lista|first }} <!-- Primo elemento -->
{{ lista|last }} <!-- Ultimo elemento -->
{{ lista|random }} <!-- Elemento casuale -->
{{ testo|slugify }} <!-- Converte in slug URL-safe -->
{{ testo|wordcount }} <!-- Conta le parole -->
{{ valore|add:5 }} <!-- Somma un valore -->
Filtri Personalizzati
Puoi creare filtri personalizzati nella cartella templatetags/:
# myapp/templatetags/filtri_custom.py
from django import template
register = template.Library()
@register.filter
def euro(valore):
return f'{valore:.2f} EUR'
@register.filter(name='moltiplica')
def moltiplica(valore, fattore):
return valore * fattore
{% load filtri_custom %}
{{ prezzo|euro }} <!-- 19.90 EUR -->
{{ quantita|moltiplica:3 }} <!-- 15 -->
Conclusione
I filtri dei template Django sono uno strumento versatile per formattare e trasformare i dati direttamente nella presentazione. Dai formati di data alla troncatura del testo, dallâordinamento alla creazione di filtri personalizzati, hai tutti gli strumenti per presentare i dati nel modo migliore senza inquinare la logica delle view.