Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Aggiungi una pagina di ricerca. Il modello books/search.html è pronto e si aspetta q e books.

  • Una vista search che legge q dall'indirizzo (testo vuoto quando manca) e trova i libri il cui titolo lo contiene, senza distinzione tra maiuscole e minuscole.
  • La route search/, denominata search.

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})
quiz iconMettiti alla prova

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