Eine Autorenseite
Teil des Abschnitts Modelle und Admin-Bereich der Django-Journey von Coddy. Lektion 23 von 23.
Das letzte Teil: Jeder Autor erhält eine eigene Seite, die überall dort verlinkt ist, wo der Name eines Autors erscheint. Es ist die Buchseite, die du in diesem Abschnitt für ein anderes Modell erstellt hast.
Denk an die drei Einstiege. Ein Besucher auf /authors/ klickt auf einen Namen. Ein Besucher auf der Seite eines Buches klickt auf „von Frank Herbert“. Und jemand gibt die Adresse eines Autors ein, den es nicht gibt, und sollte einen 404-Fehler statt eines Absturzes erhalten.
Erstelle jeden Link mit {% url %} und der ID des Autors, damit die Links urls.py folgen, falls sich diese Datei jemals ändert.
Aufgabe
MittelGib jedem Autor eine Seite unter /authors/<id>/ mit dem Namen author_detail:
- Der Name des Autors in einem
<h1>sowie Links zu seinen Büchern. - Eine ID ohne zugehörigen Autor liefert eine 404-Antwort.
- Unter
/authors/verlinkt jeder Name in seinem<h2>auf die Seite. - Auf der Seite eines Buches verlinkt der Name des Autors auf dessen Seite.
Klicke auf „Run“ und dann auf einen Namen unter /authors/.
Probier es selbst
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})
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Modelle und Admin-Bereich
Übe selbstständig: Django-Playground