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.