Pesquisando livros
Parte da seção Models e o Admin do Journey de Django da Coddy. Lição 15 de 23.
Na sua estante, você 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 monta 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 uma exceção nesse caso, causando um erro 500. Os valores são sempre texto: ?page=2 fornece "2". Todo texto contém o texto vazio, então __icontains="" corresponde a todas as linhas.
Desafio
FácilAdicione uma página de pesquisa. O template books/search.html está pronto e espera q e books.
- Uma view
searchque lêqdo endereço (texto vazio quando estiver ausente) e encontra os livros cujo título contém esse texto, independentemente de maiúsculas ou minúsculas. - A rota
search/, chamadasearch.
Pressione Run, pesquise dune no cabeçalho e, em seguida, abra /search/.
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