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.
Desafio
FácilAdicione uma página de busca. O template books/search.html está pronto e espera q e books.
- Em
books/views.py, escreva uma viewsearchque leiaqdo endereço (texto vazio quando estiver ausente) e encontre os livros cujo título o contenha, sem diferenciar maiúsculas de minúsculas. - Em
books/urls.py, adicione a rotasearch/, com o nomesearch.
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})
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