Menu
CoddyTech

Поиск книг

Часть раздела Модели и панель администратора путешествия по 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="" соответствует каждой строке.

challenge icon

Задание

Легко

Добавьте страницу поиска. Шаблон 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})
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Модели и панель администратора

Потренируйтесь самостоятельно: Песочница Django