Menu
CoddyTech

Bücher suchen

Teil des Abschnitts Modelle und Admin-Bereich der Django-Journey von Coddy. Lektion 15 von 23.

Dein Regal braucht ein Suchfeld. Eine Suchseite liest aus der Adresse, was der Besucher eingegeben hat. In /search/?q=dune ist der Teil nach ? die Abfragezeichenfolge, und Django legt ihre Schlüssel-Wert-Paare in request.GET ab, das wie ein Wörterbuch funktioniert. Das Suchfeld in der Kopfzeile ist ein Formular, das diese Adresse für dich erstellt; Formulare werden im Abschnitt „Formulare“ behandelt. Eine Seite für ein Genre könnte sie so auslesen:

def by_genre(request):
    genre = request.GET.get("genre", "fiction")
    books = Book.objects.filter(genre=genre)
    return render(request, "books/genre.html", {"genre": genre, "books": books})

.get("genre", "fiction") gibt den Standardwert zurück, wenn die Adresse kein genre enthält; request.GET["genre"] würde dort einen Fehler auslösen: einen 500-Fehler. Werte sind immer Text: ?page=2 ergibt "2". Jeder Titel enthält die leere Zeichenfolge "", daher stimmt __icontains="" mit jeder Zeile überein.

challenge icon

Aufgabe

Einfach

Füge eine Suchseite hinzu. Die Vorlage books/search.html ist fertig und erwartet q und books.

  1. Schreibe in books/views.py eine Ansicht search, die q aus der Adresse ausliest (bei Fehlen ein leerer Text) und die Bücher findet, deren Titel es enthält, unabhängig von Groß- und Kleinschreibung.
  2. Füge in books/urls.py die Route search/ mit dem Namen search hinzu.

Klicke auf „Ausführen“ und suche in der Kopfzeile nach dune: Die Suchergebnisse für "dune" listen Dune auf, und bei xyz wird „Keine Bücher passen.“ angezeigt.

Probier es selbst

from django.shortcuts import get_object_or_404, render

from .models import Book


def home(request):
    books = Book.objects.all()
    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})
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