05. Architettura MTV, Urls e Views

Arrivati a questo punto possiamo iniziare a scrivere il le nostre URL personali, che puntino alle risorse (quindi alle pagine) presenti nel nostro blog! Come fa Django a sapere che pagina deve mostrarci? Ad esempio, che succederebbe se visitassimo l'indirizzo mydjangoblog/posts? Come è facile intuire, otterremo errore perché Django non conosce quell'URL!

Dovremo quindi andare a scrivere i vari indirizzi in una sorta di registro, che è il file urls.py, ma prima è bene avere chiaro in mente come funziona Django a livello Architetturale!


L'architettura MTV di Django

Django segue un sistema chiamato MTV, che sta per Model-Template-View, una "variazione" del Pattern Architetturale MCV, Model-View-Controller:

Scheda Architettura MTV Django


Modifichiamo urls.py per aggiungere le viste per i post

Usiamo include, ovvero la funzione che ci permette di includere i file urls.py di ciascuna applicazione all'interno del progetto principale, in modo da rendere il tutto modulare.

# urls.py del progetto in mydjangoblog/mydjangoblog/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('posts.urls'))
]

Quindi quando si aprirà la pagina principale del nostro blog, verranno inclusi gli URL presenti nel file urls.py (che dovremo creare manualmente) della nostra app posts. E quindi da questo file andremo a richiamare le view che useremo per renderizzare i template html:

# urls.py dell'APP posts in mydjangoblog/posts/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.lista_post, name='lista'),
    path('post-singolo/<int:pk>/', views.post_singolo, name='singolo'),
    path('contatti/', views.contatti, name='contatti'),
]


Creiamo tre nuove funzioni in views.py per predisporle al rendering del contenuto dei post

Andiamo ora a popolare il nostro file views.py:

from django.shortcuts import render

# Create your views here.

def lista_post():
    pass

def post_singolo():
    pass

def contatti():
    pass

Nella prossima lezione aggiungeremo il percorso della cartella dei template in settings.py e modificheremo le funzioni appena aggiunte in views.py per renderizzare i template HTML.