Video Corso Django 1.11 - Programmare in Python

Crea il Tuo Blog con Django 1.11 e Bootstrap 3.3.7

07: HomePage: Lista dei Post

Per ottenere l'elenco dei post presenti nel database, in modo da poterlo visualizzare nella nostra homepage, useremo stavolta una funzione view presente tra le funzioni integrate di Django, nello specifico le Generic Display Views. La funzione si chiama List View, e considerando che dobbiamo passarle un numero abbastanza limitato di parametri, possiamo anche integrarla direttamente nel file urls.py, senza dover passare per views.py

from django.conf.urls import url
from . import views as posts_views
from .models import Post
from django.views.generic import ListView, DetailView


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

    url(r'^post-singolo/$', posts_views.post_singolo, name="singolo"),

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

Mentre per quanto riguarda la renderizzazione dei contenuti nel template html ci basta usare i tag del django template engine! QUI trovi un elenco con tutti i tag integrati in Django.
Usiamo inoltre una serie di filtri: safe, linebreaks e truncatewords_html.
Safe ci serve per fare in modo che il qualora avessimo del codice html all'interno dei nostri Post, questo venga interpretato come tale. Questo filtro viene utilizzato come "sistema di sicurezza". Supponete infatti di avere magari una sezione commenti accessibile al pubblico del vostro blog, e immaginate ora che qualsiasi cosa venga scritta dagli utenti venga interpretata automaticamente come codice.... disastro imminente!
Linebreaks fa si che eventuali spazi bianchi lasciati vengano interpretati come tali;
Truncatewords_html ci serve invece per far si che il contenuto mostrato per ciascun singolo post nella nostra homepage sia limitato a un numero di parole da noi scelto, per evitare un sovraccarico della home. Nello specifico noi scegliamo di settare questo limite a 50 parole.

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

        {% for object in object_list %}
        <a href="/{{object.id}}/{{object.slug}}/"><h1>{{object.titolo}}</h1></a>
        {{ object.data }}
        {{ object.contenuto|safe|linebreaks|truncatewords_html:50 }}
        {% endfor %}

</body>
</html>
Menu della Serie