00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

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.