Wyszukiwanie książek
Część sekcji Modele i panel administracyjny ścieżki Django w Coddy. Lekcja 15 z 23.
Twoja półka potrzebuje pola wyszukiwania. Strona wyszukiwania odczytuje z adresu to, co wpisał odwiedzający. W /search/?q=dune część po ? to ciąg zapytania, a Django umieszcza jego pary w request.GET, który działa jak słownik. Pole wyszukiwania w nagłówku to formularz, który tworzy ten adres za Ciebie; sekcja Formularze omawia formularze. Strona dla jednego gatunku mogłaby odczytać go w ten sposób:
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") zwraca wartość domyślną, gdy adres nie zawiera genre; request.GET["genre"] spowodowałoby tam błąd 500. Wartości są zawsze tekstem: ?page=2 daje "2". Każdy tytuł zawiera pusty ciąg "", więc __icontains="" pasuje do każdego wiersza.
Wyzwanie
ŁatwyDodaj stronę wyszukiwania. Szablon books/search.html jest gotowy i oczekuje q oraz books.
- W pliku
books/views.pynapisz widoksearch, który odczytujeqz adresu (gdy brakuje tej wartości, używa pustego tekstu) i wyszukuje książki, których tytuł zawiera tę wartość, bez względu na wielkość liter. - W pliku
books/urls.pydodaj ścieżkęsearch/o nazwiesearch.
Naciśnij „Uruchom” i wyszukaj dune w nagłówku: wyniki wyszukiwania dla "dune" wyświetlą Dune, a xyz pokaże komunikat „Brak pasujących książek”.
Spróbuj swoich sił
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})
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Modele i panel administracyjny
Poćwicz samodzielnie: Edytor online Django