6. 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 che è 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 templates, è che ci consentono di delegare il lavoro grafico, quindi la parte grafica ad un designer mentre noi ci occupiamo del motore del sito e della nostra applicazione. In questo modo il grafico non necessariamente deve conoscere Django per poter tirar su una pagina decente!
Quindi, dove inseriamo i nostri templates? Diamo uno sguardo al file settings.py del progetto:
BASE_DIR in settings.py ci dice dove manage.py e settings.py si trova: questo è utile per utilizzare django su sistemi operativi differenti.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Se andiamo a controllare in DATABASE vediamo che viene utilizzata questa variabile anche per la definizione della locazione del nostro database all'interno del progetto in fase di crezione.
'NAME': os.path.join(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. Quindi, in settings.py facciamo questa modifica:
'DIRS': [os.path.join(BASE_DIR, 'templates')]
Creiamo quindi una cartella templates nella stessa cartella dove abbiamo il nostro progetto e la nostra app. Dentro alla nostra 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.
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>
Possiamo ora modificare le nostre view per far renderizzar 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")