Eine Autorenseite
Teil des Abschnitts Modelle und Admin-Bereich der Django-Journey von Coddy. Lektion 23 von 23.
Das letzte Puzzlestück: 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 Wege dorthin. 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 erhalten, statt dass das Programm abstürzt.
Erstelle jeden Link mit {% url %} und der ID des Autors, damit die Links urls.py folgen, falls sich die Datei jemals ändert.
Aufgabe
MittelGib jedem Autor eine Seite unter /authors/<id>/ mit dem Namen author_detail.
- Schreibe in
books/views.pyauthor_detail(request, pk), umbooks/author_detail.htmlzu rendern: den Namen in einem<h1>, einen Link zu jedem Buch und einen 404-Fehler für eine unbekannte ID. Füge die Route hinzu. - Verlinke in
author_list.htmljeden Namen in einem<h2>mit der Seite des jeweiligen Autors. - Verlinke in
book_detail.htmlnur den Namen des Autors:by <a href="/authors/1/">Frank Herbert</a>.
Klicke unter /authors/ auf Frank Herbert: Seine Seite verlinkt auf Children of Dune und Dune.
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