Una pagina per ogni libro
Fa parte della sezione Modelli e pannello di amministrazione del percorso Django di Coddy. Lezione 14 di 23.
Ogni libro ha bisogno di una pagina al proprio indirizzo: /books/1/, /books/2/. Un convertitore di percorso, visto in Django Basics, acquisisce quel numero e lo passa alla vista. Una pagina dei libri di un anno:
path("years/<int:year>/", views.books_of_year, name="books_of_year"),
def books_of_year(request, year):
books = Book.objects.filter(year=year)
return render(request, "books/year.html", {"year": year, "books": books})Una pagina per una singola riga la identifica tramite la sua chiave primaria, pk: il suo id. get() genera un'eccezione se la riga non esiste, e un'eccezione in una vista provoca un arresto anomalo, 500 Errore del server. get_object_or_404() di django.shortcuts risponde invece con 404 Pagina non trovata. Accetta il modello e poi le condizioni: get_object_or_404(Book, title="Emma").
Per creare un collegamento a una route che acquisisce un valore, inserisci il valore dopo il nome: {% url 'books:books_of_year' book.year %}.
Sfida
MedioAssegna una pagina a ogni libro. Il template books/book_detail.html è pronto e si aspetta book.
- Una vista
book_detail(request, pk). Un ID senza un libro restituisce 404. - Una route per
/books/<id>/chiamatabook_detail, che corrisponde solo ai numeri. - Nella pagina iniziale, ogni titolo rimanda alla propria pagina.
Premi Run, fai clic su un titolo, poi apri /books/999/.
Provalo tu
from django.shortcuts import render
from .models import Book
def home(request):
books = Book.objects.all()
return render(request, "books/home.html", {"books": books})
Tutte le lezioni di Modelli e pannello di amministrazione
Esercitati da solo: Playground Django