Una pagina di autore
Fa parte della sezione Modelli e pannello di amministrazione del percorso Django di Coddy. Lezione 23 di 23.
L’ultimo tassello: ogni autore ha una pagina tutta sua, raggiungibile da ogni punto in cui compare il nome dell’autore. È la pagina del libro che hai creato in questa sezione, per un altro modello.
Pensa ai tre modi per arrivarci. Un visitatore su /authors/ fa clic su un nome. Un visitatore sulla pagina di un libro fa clic su «di Frank Herbert». E qualcuno digita l’indirizzo di un autore inesistente e dovrebbe ricevere un 404, non causare un arresto anomalo.
Crea ogni link con {% url %} e l’id dell’autore, così i link seguiranno urls.py se dovesse cambiare.
Sfida
MedioAssegna a ogni autore una pagina all'indirizzo /authors/<id>/ chiamata author_detail.
- In
books/views.py, scriviauthor_detail(request, pk)per renderizzarebooks/author_detail.html: il nome in un<h1>, un link a ogni libro e una pagina 404 per un id sconosciuto. Aggiungi la relativa route. - In
author_list.html, collega il nome di ogni<h2>alla pagina dell'autore. - In
book_detail.html, crea un link solo sul nome dell'autore:by <a href="/authors/1/">Frank Herbert</a>.
In /authors/, fai clic su Frank Herbert: la sua pagina contiene link a Children of Dune e Dune.
Provalo tu
from django.shortcuts import get_object_or_404, render
from .models import Author, Book
def home(request):
books = Book.objects.select_related("author")
return render(request, "books/home.html", {"books": books})
def book_detail(request, pk):
book = get_object_or_404(Book, pk=pk)
return render(request, "books/book_detail.html", {"book": book})
def search(request):
q = request.GET.get("q", "")
books = Book.objects.filter(title__icontains=q).select_related("author")
return render(request, "books/search.html", {"q": q, "books": books})
def author_list(request):
authors = Author.objects.prefetch_related("books")
return render(request, "books/author_list.html", {"authors": authors})
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Modelli e pannello di amministrazione
Esercitati da solo: Playground Django