Vamos a ver como crear un formulario, de momento de forma manual y luego como enviar la información al servidor.
Empezamos creando la carpeta que contendrá las plantillas de formularios, como ya dijimos en capítulos anteriores se puede usar cualquier nombre pero por convención se utiliza "templates". (al crearla con este nombre dentro del proyecto no hace falta registrarla.)
Ahora dentro de esta carpeta creamos el archivo html que contendrá el formulario: busqueda_juegos.html.
Creamos una estructura típica de html, para diseñar el formulario. Es muy sencilla, solamente un cuadro donde meter texto y un botón para enviar el formulario.
gestionPedidos/templates/busqueda_juegos.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Busqueda de Productos</title>
</head>
<body>
<form action="/buscar/" method="get">
<!-- Cuadro de texto de entrada -->
<input type="text" name="prd">
<input type="submit" value="Buscar">
</form>
</body>
</html>
from django.shortcuts import render
# Create your views here.
def busqueda_juegos(request):
return render(request, "busqueda_juegos.html")
from django.contrib import admin
from django.urls import path
# Siempre hay que importar las vistas de la aplicación
from gestionPedidos import views
urlpatterns = [
path('admin/', admin.site.urls),
path('busqueda_juegos/', views.busqueda_juegos),
]
gestionPedidos/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def busqueda_juegos(request):
return render(request, "busqueda_juegos.html")
def buscar(request):
mensaje = f"Articulo Buscado: {request.GET['prd']}"
# como request.GET es un diccionario se podría usar también
# mensaje = f"Articulo Buscado: {request.GET.get('prd')}
return HttpResponse(mensaje)
tiendaVirtual/urls.py
from django.contrib import admin
from django.urls import path
# Siempre hay que importar las vistas de la aplicación
from gestionPedidos import views
urlpatterns = [
path('admin/', admin.site.urls),
path('busqueda_juegos/', views.busqueda_juegos),
path('buscar/', views.buscar),
]
gestionPedidos/views.py
...
# Create your views here.
def busqueda_juegos(request):
return render(request, "busqueda_juegos.html")
def buscar(request):
# Condicional para verificar que el formulario no
# venga vacio.
if request.GET['prd']:
mensaje = f"Articulo Buscado: {request.GET['prd']}"
else:
mensaje="No se ha introducido información para buscar el producto."
return HttpResponse(mensaje)
gestionPedidos/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Para poder usar el modelo Articulos de la base de datos
from gestionPedidos.models import Articulos
# Create your views here.
def busqueda_juegos(request):
return render(request, "busqueda_juegos.html")
def buscar(request):
# Condicional para verificar que el formulario no
# venga vacio.
if request.GET['prd']:
# mensaje = f"Articulo Buscado: {request.GET['prd']}"
juego=request.GET['prd']
items = Articulos.objects.filter(nombre__icontains=juego)
return render(request, "resultados_busqueda.html", {'items':items, 'query':juego})
else:
mensaje="No se ha introducido información para buscar el producto."
return HttpResponse(mensaje)
return render(request, "resultados_busqueda.html", {'items':items, 'query':juego})
gestionPedidos/templates/resultados_busqueda.html.py
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Resultados Busqueda</title>
<style>
td {
text-align: center;
}
</style>
</head>
<body>
<p>Estas buscando: <strong>{{query}}</strong></p>
<table border="1">
{% if items %}
<h4>Artículos encontrados: {{items|length}} juegos</h4>
<!-- Recorremos la lista -->
<tr>
<th>Nombre</th>
<th>Categoria</th>
<th>Precio</th>
</tr>
{% for item in items%}
<tr>
<td>
{{item.nombre}}
</td>
<td>
{{item.categoria}}
</td>
<td>
{{item.precio}}
</td>
</tr>
{% endfor %}
{% else %}
<p>La información solicitada no existe.</p>
{% endif %}
</table>
</body>
</html>
¿Cómo limitar el número de caracteres a buscar en la base de datos?
gestionPedidos/views.py
....
def buscar(request):
# Condicional para verificar que el formulario no
# venga vacio.
if request.GET['prd']:
# mensaje = f"Articulo Buscado: {request.GET['prd']}"
juego=request.GET['prd']
if len(juego)>20:
mensaje = "El texto de busqueda es demasiado largo (max 20 caracteres)"
else:
items = Articulos.objects.filter(nombre__icontains=juego)
return render(request, "resultados_busqueda.html", {'items':items, 'query':juego})
else:
mensaje="No se ha introducido información para buscar el producto."
return HttpResponse(mensaje)
gestionPedidos/templates/busqueda_juegos.html:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Busqueda de Productos</title>
</head>
<body>
<form action="/buscar/" method="get">
<!-- Cuadro de texto de entrada -->
<input type="text" name="prd" maxlenght=20>
<input type="submit" value="Buscar">
</form>
</body>
</html>
No hay comentarios:
Publicar un comentario