8. Renderizzare Post Singoli - Programmare in Python

8. Renderizzare Post Singoli

Utilizzeremo una delle Generic Display Views anche per quanto riguarda i post singoli. Vedremo come creare una funzione view per i post singoli nel dettaglio in una serie successiva.

Nello specifico, stavolta useremo Detail View

Avendola già importata, ci basta integrarla nel file urls.py dell'applicazione, in questo modo:

urlpatterns = [
    url(r'^$', ListView.as_view(
        queryset = Post.objects.all().order_by("-data"),
        template_name = "lista_post.html"), name = "lista"),

    url(r'^(?P<id>\d+)/(?P<slug>[\w-]+)/$', DetailView.as_view(
        model = Post,
        template_name = "post_singolo.html",), name="singolo"),

    url(r'^contatti/$', posts_views.contatti, name="contatti"),
]

N.B. L'utilizzo di una CBV richiamata direttamente nel file urls.py come mostrato in questa lezione, non è tipico, seppur comunque fattibile. Normalmente, le views, sia class based che function based, vengono definite comunque all'interno del file views.py, come abbiamo visto nella lezioneArchitettura MTV, Urls e Views. In questo breve corso introduttivo ho cercato di trovare un compromesso tra il mostrare la gran potenza di Django nel permettere di creare web app di una certa complessità scrivendo davvero poche righe di codice. Per un corso completo, dai uno sguardo aGuida Pratica e Completa a Django, Python e Bootstrap.

Come vedete, abbiamo passato solo due parametri: il model e il template. La funzione penserà a fare il rendering per noi!

Dobbiamo, chiaramente, fare anche qualche modifica al template "post_singolo.html", in modo da prepararlo ad accogliere il contenuto che vogliamo visualizzare. Nello specifico ci interessano Titolo del Post, la Data e, chiaramente, il Contenuto! Anche stavolta usiamo alcuni filtri del Django Template Engine, nello specifico safe e linebreaks, in modo da far si che qualora utilizzassimo codice html questo venga interpretato correttamente.

<!DOCTYPE html>
<html lang="it">
    <head>
        <meta charset="UTF-8">
        <title>Post Singolo</title>
    </head>

    <body>
        <h1>{{ object.titolo }}</h1>
        <h4>{{ object.data }}</h4>
        {{ object.contenuto|safe|linebreaks }}
    </body>>

</html>