Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Gib jedem Autor eine Seite unter /authors/<id>/ mit dem Namen author_detail.

  1. Schreibe in books/views.py author_detail(request, pk), um books/author_detail.html zu 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.
  2. Verlinke in author_list.html jeden Namen in einem <h2> mit der Seite des jeweiligen Autors.
  3. Verlinke in book_detail.html nur 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})
quiz iconTeste dich selbst

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