Rechercher des livres
Fait partie de la section Modèles et interface d’administration du Journey Django de Coddy. Leçon 15 sur 23.
Votre étagère a besoin d’un champ de recherche. Une page de recherche lit ce que le visiteur a saisi dans l’adresse. Dans /search/?q=dune, la partie après ? est la chaîne de requête, et Django place ses paires dans request.GET, qui fonctionne comme un dictionnaire. Le champ de recherche de l’en-tête est un formulaire qui construit cette adresse pour vous ; la section Formulaires traite des formulaires. Une page consacrée à un genre pourrait la lire ainsi :
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") renvoie la valeur par défaut lorsque l’adresse ne contient pas de genre ; request.GET["genre"] provoquerait une erreur à cet endroit, une erreur 500. Les valeurs sont toujours du texte : ?page=2 donne "2". Tout texte contient le texte vide, donc __icontains="" correspond à chaque ligne.
Défi
FacileAjoute une page de recherche. Le modèle books/search.html est prêt et attend q et books.
- Une vue
searchqui récupèreqdans l’adresse (texte vide si le paramètre est absent) et trouve les livres dont le titre le contient, sans distinction de casse. - La route
search/, nomméesearch.
Clique sur Run, recherche dune dans l’en-tête, puis ouvre /search/.
Essayez vous-même
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})
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Modèles et interface d’administration
3Des pages issues de la base de données
Une liste issue de la base de donnéesUne page pour chaque livreEntraînez-vous par vous-même : Playground Django