Menu
CoddyTech

Búsqueda de libros

Parte de la sección Modelos y el panel de administración del Journey de Django de Coddy. Lección 15 de 23.

Tu estantería necesita un cuadro de búsqueda. Una página de búsqueda lee lo que escribió el visitante desde la dirección. En /search/?q=dune, la parte que va después de ? es la cadena de consulta, y Django coloca sus pares en request.GET, que funciona como un diccionario. El cuadro de búsqueda de la cabecera es un formulario que construye esta dirección por ti; la sección Formularios trata los formularios. Una página para un género podría leerla así:

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") devuelve el valor predeterminado cuando la dirección no contiene genre; request.GET["genre"] provocaría un error en ese caso: un error 500. Los valores siempre son texto: ?page=2 da "2". Todo texto contiene el texto vacío, así que __icontains="" coincide con todas las filas.

challenge icon

Desafío

Fácil

Añade una página de búsqueda. La plantilla books/search.html está lista y espera q y books.

  • Una vista search que lee q de la dirección (texto vacío si falta) y encuentra los libros cuyo título lo contiene, sin distinguir entre mayúsculas y minúsculas.
  • La ruta search/, llamada search.

Pulsa Run, busca dune en el encabezado y después abre /search/.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Modelos y el panel de administración

Practica por tu cuenta: Playground de Django