06. Templates e Views

Una delle caratteristiche più performanti di Django è la possibilità di utilizzare dei template. In Italiano questo significa "sagoma", o "forma", il modello della pagina che vogliamo mostrare, e questo risulta utilissimo perché ci permette di avere una pagina intelligente e riutilizzabile.

Avremo quindi delle pagine che sono automaticamente in grado di riconoscere il contenuto che gli viene passato, quindi possiamo dire che avremo una sorta di scheletro in cui verranno caricati i vari dati di ciascun post del blog, quindi nel nostro caso specifico, il contenuto del post, il titolo del post, e volendo la data di creazione ed ultima modifica.

Un'altra caratteristica molto interessante dei template è che ci consentono di delegare il lavoro grafico mentre noi ci occupiamo del motore del sito e della nostra applicazione. Quindi dove inseriamo i nostri templates? Diamo uno sguardo al file settings.py del progetto.

La variabile BASE_DIR in settings.py ci dice dove si trovano manage.py e settings.py, se andiamo a controllare in DATABASES vediamo che viene utilizzata questa variabile anche per la definizione della locazione del nostro database all'interno del progetto in fase di creazione:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Vogliamo fare la stessa cosa con TEMPLATES, quindi vogliamo definire una locazione in cui andremo a creare la nostra cartella TEMPLATES contenente appunto i nostri template.


Modifichiamo settings.py per aggiungere il percorso della cartella dei Template

Quindi, in settings.py importiamo os e modifichiamo la lista DIRS:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(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',
            ],
        },
    },
]

Creiamo quindi una cartella templates nella stessa cartella dove abbiamo il nostro progetto e la nostra app, /mydjangoblog/templates/. Dentro alla cartella creiamo tre file, post_singolo.html in cui verranno renderizzati i post singoli, lista_post.html dove verrà renderizzata la lista dei post e poi contatti.html, dove avremo le informazioni di contatto del nostro blog.

Ecco i template per ciascun post, post_singolo.html:

<!--DOCTYPE html -->
<html>
    <body>
        <h1>Post Singolo!</h1>
    </body>
</html>

Template homepage, lista_post.html:

<!--DOCTYPE html -->
<html>
    <body>
        <h1>Lista dei Post</h1>
    </body>
</html>

Template sezione contatti, contatti.html:

<!--DOCTYPE html -->
<html>
    <body>
        <h1>Contattaci!</h1>
    </body>
</html>


Aggiorniamo le funzioni in views.py per renderizzare i template HTML

Possiamo ora modificare le nostre view per far renderizzare loro le nostre pagine HTML!

def lista_post(request):
    return render(request, "lista_post.html")

def post_singolo(request):
    return render(request, "post_singolo.html")

def contatti(request):
    return render(request, "contatti.html")

Nella prossima lezione utilizzeremo le Generic Display Views di Django per ottenere l'elenco dei post presenti nel database.