Ricerca di libri
Fa parte della sezione Modelli e pannello di amministrazione del percorso Django di Coddy. Lezione 15 di 23.
Al tuo scaffale serve una casella di ricerca. Una pagina di ricerca legge dall’indirizzo ciò che il visitatore ha digitato. In /search/?q=dune, la parte dopo ? è la stringa di query e Django inserisce le sue coppie in request.GET, che funziona come un dizionario. La casella di ricerca nell’intestazione è un modulo che crea questo indirizzo per te; la sezione Moduli tratta i moduli. Una pagina per un singolo genere potrebbe leggerlo così:
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") restituisce il valore predefinito quando nell’indirizzo non c’è genre; request.GET["genre"] in quel caso solleverebbe un’eccezione, generando un errore 500. I valori sono sempre testo: ?page=2 restituisce "2". Ogni testo contiene il testo vuoto, quindi __icontains="" corrisponde a ogni riga.
Sfida
FacileAggiungi una pagina di ricerca. Il modello books/search.html è pronto e si aspetta q e books.
- Una vista
searchche leggeqdall'indirizzo (testo vuoto quando manca) e trova i libri il cui titolo lo contiene, senza distinzione tra maiuscole e minuscole. - La route
search/, denominatasearch.
Premi Run, cerca dune nell'intestazione, poi apri /search/.
Provalo tu
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})
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Modelli e pannello di amministrazione
Esercitati da solo: Playground Django