Menu
CoddyTech

Pesquisando livros

Parte da seção Models e o Admin do Journey de Django da Coddy. Lição 15 de 23.

Sua estante precisa de uma caixa de pesquisa. Uma página de pesquisa lê o que o visitante digitou no endereço. Em /search/?q=dune, a parte depois de ? é a string de consulta, e o Django coloca seus pares em request.GET, que funciona como um dicionário. A caixa de pesquisa do cabeçalho é um formulário que cria esse endereço para você; a seção Formulários aborda formulários. Uma página para um gênero poderia lê-lo assim:

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") retorna o valor padrão quando o endereço não tem genre; request.GET["genre"] geraria um erro nesse caso, um 500. Os valores são sempre texto: ?page=2 fornece "2". Todo título contém a string vazia "", então __icontains="" corresponde a todas as linhas.

challenge icon

Desafio

Fácil

Adicione uma página de busca. O template books/search.html está pronto e espera q e books.

  1. Em books/views.py, escreva uma view search que leia q do endereço (texto vazio quando estiver ausente) e encontre os livros cujo título o contenha, sem diferenciar maiúsculas de minúsculas.
  2. Em books/urls.py, adicione a rota search/, com o nome search.

Pressione Executar e pesquise dune no cabeçalho: Search results for "dune" lista Dune, e xyz exibe No books match.

Experimente você mesmo

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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Models e o Admin

Pratique por conta própria: Playground de Django