Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Assegna a ogni autore una pagina all'indirizzo /authors/<id>/ chiamata author_detail.

  1. In books/views.py, scrivi author_detail(request, pk) per renderizzare books/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.
  2. In author_list.html, collega il nome di ogni <h2> alla pagina dell'autore.
  3. 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})
quiz iconMettiti alla prova

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