Un formulario de búsqueda
Parte de la sección Formularios del Journey de Django de Coddy. Lección 1 de 20.
Los visitantes todavía no pueden buscar en el tablero de eventos. Un formulario es un conjunto de campos y un botón que envía a una URL lo que se escribió.
Un formulario que solo lee datos usa method="get": el navegador pone cada campo en la cadena de consulta de la URL, como name=value. Un filtro de tamaño en la página de una tienda:
<form method="get">
<select name="size">
<option value="S">Small</option>
<option value="L">Large</option>
</select>
<button type="submit">Show</button>
</form>Al elegir Large, se abre /products/?size=L. El name del campo es la clave, así que la vista lo lee como cualquier cadena de consulta: request.GET.get("size", ""), con un valor predeterminado para la página simple.
Después de una búsqueda, la página se vuelve a cargar y el cuadro queda vacío. Para conservar las palabras, pásalas de vuelta a la plantilla y escríbelas en el value del campo de entrada.
Desafío
FácilAñade una búsqueda a la página de inicio:
- Encima de la lista en
event_list.html, un formulario que envíe su campo en la URL: un campo de entrada llamadoqy un botónSearch. - En
event_list, muestra solo los eventos cuyo título contengaq, sin distinguir entre mayúsculas y minúsculas. - El cuadro conserva lo que se buscó.
Pulsa Run y busca jazz.
Pruébalo tú mismo
from django.shortcuts import get_object_or_404, render
from .models import Event
def event_list(request):
events = Event.objects.all()
return render(request, "events/event_list.html", {"events": events})
def event_detail(request, pk):
event = get_object_or_404(Event, pk=pk)
return render(request, "events/event_detail.html", {"event": event})
Todas las lecciones de Formularios
1Formularios HTML
Un formulario de búsquedaUn formulario POSTRedirigir después de POST2Formularios de Django
Un formulario de DjangoDibujar un formulario5Proyecto: Lista de invitados
Una confirmación de asistencia por correo electrónicoUna página para invitadosPractica por tu cuenta: Playground de Django