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.

  1. В books/views.py напиши представление search, которое считывает q из адреса (пустой текст, если параметр отсутствует) и находит книги, в названии которых есть этот текст, независимо от регистра.
  2. В books/urls.py добавь маршрут search/ с именем search.

Нажми «Играть» и выполни поиск по dune в заголовке: в результатах поиска по запросу "dune" будет указана книга Dune, а для xyz появится сообщение «Совпадений нет».

Попробуйте сами

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