Wyszukiwanie książek
Część sekcji Modele i panel administracyjny ścieżki Django w Coddy. Lekcja 15 z 23.
Na twojej półce potrzebne jest pole wyszukiwania. Strona wyszukiwania odczytuje z adresu to, co wpisał użytkownik. W /search/?q=dune część po ? to ciąg zapytania, a Django umieszcza jego pary w request.GET, które działa jak słownik. Pole wyszukiwania w nagłówku to formularz, który tworzy ten adres za ciebie; formularze są omówione w sekcji Formularze. Strona dla jednego gatunku mogłaby odczytywać 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; w takim przypadku request.GET["genre"] spowodowałoby błąd 500. Wartości są zawsze tekstem: ?page=2 daje "2". Każdy tekst zawiera pusty tekst, więc __icontains="" pasuje do każdego wiersza.
Wyzwanie
ŁatwyDodaj stronę wyszukiwania. Szablon books/search.html jest gotowy i oczekuje wartości q oraz books.
- Widok
search, który odczytujeqz adresu (pusty tekst, gdy go brakuje) i wyszukuje książki, których tytuł zawiera tę wartość, niezależnie od wielkości liter. - Trasa
search/o nazwiesearch.
Naciśnij Run, wyszukaj dune w nagłówku, a następnie otwórz /search/.
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