Поиск книг
Часть раздела Модели и панель администратора путешествия по Django на Coddy. Урок 15 из 23.
В вашей книжной полке нужна строка поиска. Страница поиска считывает из адреса то, что ввёл посетитель. В /search/?q=dune часть после ? — это строка запроса, а Django помещает её пары в request.GET, который работает как словарь. Строка поиска в заголовке — это форма, которая формирует для вас этот адрес; формы рассматриваются в разделе «Формы». Страница для одного жанра может считывать его так:
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") возвращает значение по умолчанию, если в адресе нет genre; в этом случае request.GET["genre"] вызвал бы ошибку 500. Значения всегда являются текстом: ?page=2 даёт "2". Любой текст содержит пустой текст, поэтому __icontains="" соответствует каждой строке.
Задание
ЛегкоДобавьте страницу поиска. Шаблон books/search.html готов и ожидает q и books.
- Представление
search, которое считываетqиз адреса (если параметр отсутствует, используется пустой текст) и находит книги, в названии которых он содержится, независимо от регистра. - Маршрут
search/с именемsearch.
Нажмите Run, выполните поиск по запросу dune в шапке, затем откройте /search/.
Попробуйте сами
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})
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Модели и панель администратора
Потренируйтесь самостоятельно: Песочница Django