Menu
CoddyTech

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 con i 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 con la sua chiave primaria, pk: il suo id. get() genera un'eccezione se la riga non esiste e un'eccezione in una vista causa un errore, 500 Errore del server. get_object_or_404() da django.shortcuts risponde invece con 404 Pagina non trovata. Accetta il modello, seguito dai criteri: get_object_or_404(Book, title="Emma").

Per creare un collegamento a un percorso che acquisisce un valore, inserisci il valore dopo il nome: {% url 'books:books_of_year' book.year %}.

challenge icon

Sfida

Medio

Dai a ogni libro una pagina. Il template books/book_detail.html è pronto e si aspetta book.

  1. In books/views.py, scrivi book_detail(request, pk): mostra il libro con quell’id oppure restituisce un errore 404.
  2. In books/urls.py, indirizza /books/<id>/, solo numeri, a essa come book_detail.
  3. In home.html, collega ogni titolo alla sua pagina. Solo il titolo è il collegamento: <a ...>Dune</a> (1965).

Fai clic su Dune nella pagina iniziale, poi apri /books/999/: pagina non trovata (404).

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