Menu
CoddyTech

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.

challenge icon

Défi

Facile

Ajoutez une page de recherche. Le modèle books/search.html est prêt et attend q et books.

  1. Dans books/views.py, écrivez une vue search qui lit q dans l’adresse (texte vide si la valeur est absente) et trouve les livres dont le titre le contient, sans tenir compte de la casse.
  2. Dans books/urls.py, ajoutez la route search/, nommée search.

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})
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Django