Sistema di Template
Il sistema di template di Django permette di separare la logica dellâapplicazione dalla presentazione HTML. Grazie al Django Template Language (DTL), puoi generare pagine dinamiche inserendo dati provenienti dalle view direttamente nel markup.
Configurazione della Directory dei Template
Per prima cosa, devi indicare a Django dove cercare i file template. Nel file settings.py, configura la chiave DIRS allâinterno di TEMPLATES:
# settings.py
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Con APP_DIRS: True, Django cerca anche una cartella templates/ allâinterno di ogni app installata.
Rendering di un Template dalla View
Per restituire un template come risposta HTTP, utilizza la funzione render():
# views.py
from django.shortcuts import render
def homepage(request):
contesto = {
'titolo': 'Benvenuto su Django',
'utente': 'Mario',
'articoli': ['Introduzione', 'Template', 'Modelli'],
}
return render(request, 'homepage.html', contesto)
Il terzo argomento di render() e il contesto: un dizionario Python i cui valori diventano accessibili nel template.
Variabili nel Template
Allâinterno del file HTML, puoi accedere alle variabili del contesto usando la sintassi con doppie parentesi graffe {{ }}:
<!-- templates/homepage.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ titolo }}</title>
</head>
<body>
<h1>Ciao, {{ utente }}!</h1>
<p>Numero di articoli: {{ articoli|length }}</p>
</body>
</html>
Puoi anche accedere ad attributi di oggetti e chiavi di dizionari usando la notazione con il punto:
# views.py
def profilo(request):
contesto = {
'utente': {
'nome': 'Mario',
'email': 'mario@example.com',
}
}
return render(request, 'profilo.html', contesto)
<!-- templates/profilo.html -->
<p>Nome: {{ utente.nome }}</p>
<p>Email: {{ utente.email }}</p>
Il Contesto del Template
Il contesto e un dizionario che mappa nomi di variabili ai rispettivi valori. Puoi anche costruirlo manualmente con la classe Context:
from django.template import Template, Context
template = Template('Ciao, {{ nome }}!')
contesto = Context({'nome': 'Luigi'})
risultato = template.render(contesto)
print(risultato) # Output: Ciao, Luigi!
I context processor definiti in settings.py aggiungono automaticamente variabili utili a ogni template, come request, user e messages.
Commenti nei Template
Per inserire commenti che non appaiono nellâHTML generato:
{# Questo e un commento su una riga #}
{% comment "Nota per il team" %}
Questo blocco non verra renderizzato.
{% endcomment %}
Conclusione
Il sistema di template di Django offre un modo pulito e sicuro per generare HTML dinamico. La separazione tra logica e presentazione rende il codice piu organizzato e manutenibile. Con la sintassi {{ }} per le variabili e la configurazione corretta delle directory, sei pronto a costruire interfacce web complete.