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 dans l’adresse ce que le visiteur a saisi. 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"] déclencherait alors une erreur 500. Les valeurs sont toujours du texte : ?page=2 donne "2". Chaque titre contient la chaîne vide "", donc __icontains="" correspond à chaque ligne.
Défi
FacileAjoutez une page de recherche. Le modèle books/search.html est prêt et attend q et books.
- Dans
books/views.py, écrivez une vuesearchqui litqdans l’adresse (texte vide si la valeur est absente) et trouve les livres dont le titre le contient, sans tenir compte de la casse. - Dans
books/urls.py, ajoutez la routesearch/, nomméesearch.
Appuyez sur « Jouer » et recherchez dune dans l’en-tête : les résultats de recherche pour « dune » affichent Dune, et xyz affiche Aucun livre ne correspond.
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