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 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 crea 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 tiene genre; request.GET["genre"] generaría un error en ese caso, un 500. Los valores siempre son texto: ?page=2 da "2". Todos los títulos contienen la cadena vacía "", 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.

  1. En books/views.py, escribe una vista search que lea q de la dirección (texto vacío si falta) y encuentre los libros cuyo título lo contiene, sin distinguir mayúsculas de minúsculas.
  2. En books/urls.py, añade la ruta search/, con el nombre search.

Pulsa Ejecutar y busca dune en el encabezado: «Resultados de búsqueda de "dune"» muestra Dune, y xyz muestra «No hay libros que coincidan».

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