Bücher suchen
Teil des Abschnitts Modelle und Admin-Bereich der Django-Journey von Coddy. Lektion 15 von 23.
Dein Bücherregal braucht ein Suchfeld. Eine Suchseite liest aus der Adresse aus, 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 im Header 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 in diesem Fall einen 500-Fehler auslösen. Werte sind immer Text: ?page=2 ergibt "2". Jeder Text enthält den leeren Text, daher findet __icontains="" jede Zeile.
Aufgabe
EinfachFüge eine Suchseite hinzu. Die Vorlage books/search.html ist fertig und erwartet q und books.
- Eine Ansicht
search, dieqaus der Adresse ausliest (leerer Text, wenn der Wert fehlt) und die Bücher findet, deren Titel den Suchbegriff unabhängig von Groß- und Kleinschreibung enthält. - Die Route
search/mit dem Namensearch.
Klicke auf „Run“, suche in der Kopfzeile nach dune und rufe dann /search/ auf.
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})
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