Integre la función de búsqueda en su aplicación Django usando esta guía paso a paso.

Agregar una función de búsqueda a su aplicación web les permite a sus usuarios navegar fácilmente buscando lo que desean. Django proporciona soporte integrado para crear una función de búsqueda mediante el uso de sus potentes herramientas de consulta y ORM. Con Django, puede implementar diferentes tipos de búsquedas, incluidas búsquedas de palabras clave, búsquedas simples y búsquedas avanzadas con filtros.

Implementando la funcionalidad de búsqueda en Django

Django le permite implementar diferentes tipos de búsquedas con sus métodos y funciones integrados. Puede implementar una búsqueda de palabra clave simple o una búsqueda avanzada según su caso de uso. Debe implementar una búsqueda avanzada si tiene una aplicación compleja, como un sitio web de comercio electrónico, mientras que una búsqueda simple por palabra clave es adecuada para proyectos menos complejos.

El código utilizado en este artículo se puede encontrar en GitHub y es gratis para su uso bajo la licencia MIT.

instagram viewer

Implementar una búsqueda simple de palabras clave en Django

Para crear una función de búsqueda simple, debe comenzar creando su barra de búsqueda. Puede construir su barra de búsqueda en su barra de navegación. Oreja proporciona una barra de navegación lista para usar con una barra de búsqueda, y puede fácilmente integra Bootstrap y sus componentes en tu proyecto Django. Cree su barra de búsqueda en un archivo HTML, establezca el método de formulario en CORREO, y darle al campo de entrada un nombre atributo como este:

<formaclase="d-flex"role="buscar"método="CORREO">
 {% csrf_token%}
<aporte
class="form-control me-NN"
tipo = "buscar"
marcador de posición="Buscar"
nombre="buscar_consulta"
requerido aria-label="Buscar"
 >
<botónclase="btn btn-esquema-éxito"tipo="entregar">Buscarbotón>
forma>

En el código anterior, el nombre del campo de entrada es consulta de busqueda. El formulario hace uso de Token CSRF de Django a prevenir ataques CSRF. Para que tu barra de búsqueda funcione, sigue estos pasos.

Crear una vista para la búsqueda

  • Abre tu vistas.py archivar e importar su modelo desde el modelos.py archivo:
de .modelos importar Nombre del modelo
  • Cree una función de vista para la función de búsqueda:
definitivamentefunción_de_búsqueda(pedido):
# Comprobar si la solicitud es una solicitud posterior.
si solicitud.método == 'CORREO':
# Recuperar la consulta de búsqueda ingresada por el usuario
search_query = solicitud. CORREO['consulta de busqueda']
# Filtre su modelo por la consulta de búsqueda
publicaciones = Modelo.objetos.filtro (fieldName__contains=search_query)
devolver hacer (pedir, 'aplicación/nombre_plantilla.html', {'consulta':consulta de busqueda, 'publicaciones':publicaciones})
demás:
devolver hacer (pedir, 'aplicación/nombre_plantilla.html',{})

La función anterior primero verifica si el cliente está enviando un CORREO pedido. Si la verificación pasa, continúa para recuperar el valor de la consulta de búsqueda del usuario de esta manera:

search_query = solicitud. CORREO['consulta de busqueda']

En solicitud. POST['búsqueda_consulta'], 'consulta de busqueda' debe ser reemplazado con el nombre del campo de entrada de su barra de búsqueda.

Después de recuperar el valor de la consulta de búsqueda del usuario, la función filtra el modelo usando el __contiene método. El __contiene El método no distingue entre mayúsculas y minúsculas. Para utilizar este método, debe seguir este formato:

fieldName__ contiene

Por ejemplo, si desea que sus usuarios busquen en función de un campo modelo llamado nombre, debe modificar su código para que se vea así:

name__contains=búsqueda_consulta

Finalmente, la función representa una plantilla y pasa la consulta de búsqueda y el modelo filtrado como contexto.

Sin embargo, si el método del formulario no es un CORREO solicitud, la función representa una plantilla con un diccionario vacío y no procesa la consulta de búsqueda.

Crear una plantilla para el resultado de la búsqueda

  • Cree un archivo HTML para devolver los resultados de su búsqueda al lado del cliente.
  • Muestra el resultado de la búsqueda en la página para que el usuario lo vea. El código en su archivo HTML debería verse así:
{% si consulta%}
<división>
<división>
recorrer la consulta de búsqueda
{% para publicación en publicaciones %}
<división>
devolver consulta de búsqueda
<pag>{{título de la entrada}}pag>
división>
{% endfor%}
división>
división>
{% demás %}
devolver un mensaje si el usuario no ingresa una consulta de búsqueda
<h1>Por favor, introduzca una consulta de búsquedah1>
{% terminara si %}

La plantilla HTML anterior verifica si el usuario ingresa una consulta de búsqueda en la barra de búsqueda. Si el usuario ingresa una consulta de búsqueda, un en bucle Recorre los resultados de la búsqueda y los devuelve al usuario. Cuando no hay una consulta de búsqueda, se muestra un mensaje para que el usuario ingrese una consulta de búsqueda. Un caso en el que podría no haber una consulta de búsqueda es si su usuario va directamente a la URL sin completar la barra de búsqueda, es decir, su usuario ingresa una URL como misitioweb.com/buscar directamente en el navegador. Debe asegurarse de utilizar Herencia de plantilla de Django en su archivo HTML.

  • Modifique su código HTML para devolver un mensaje de error si no hay ningún resultado de búsqueda.
{% si consulta%}
<división>
<división>
comprobar si hay un resultado en la base de datos
{% si publica %}
recorrer la consulta de búsqueda si hay un resultado
{% para publicación en publicaciones %}
<división>
devolver consulta de búsqueda
<pag>{{título de la entrada}}pag>
división>
{% endfor%}
devolver un mensaje si no se encuentran resultados.
{% demás %}
<h3>No se encontraron resultados de búsquedah3>
{% terminara si %}
división>
división>
{% demás %}
<h1>Por favor, introduzca una consulta de búsquedah1>
{% terminara si %}

La nueva plantilla HTML permite una mejor experiencia de usuario. Introduce una declaración condicional para verificar si un resultado de búsqueda está disponible en la base de datos. Si lo hay, muestra el resultado de la búsqueda; de lo contrario, envía un mensaje de error al usuario.

Configure sus patrones de URL

  • Si no lo ha hecho, cree un urls.py archivo en el directorio de su aplicación.
  • En tus urls.py, crea un patrón de URL para tu página de búsqueda:
de django.urls importar camino
de. importar puntos de vista

patrones de URL = [
camino('buscar/', vistas.función_búsqueda, nombre='vista de búsqueda'),
]

El programa anterior primero importa el camino función y la puntos de vista archivo relacionado con la aplicación. Luego crea una ruta llamada vista de búsqueda para la página de búsqueda.

  • Agregue una acción de formulario a su barra de búsqueda. La URL de la acción debe apuntar a la ruta de la URL dedicada a la vista de búsqueda. En este caso, el formulario apunta a vista de búsqueda.
<formaclase="d-flex"role="buscar"método="CORREO"acción="{% url 'vista de búsqueda' %}">
<aporte
class="form-control me-NN"
tipo = "buscar"
placeholder="Buscar algo"
nombre="buscar_consulta"
requerido aria-label="Buscar"
>
<botónclase="btn btn-esquema-éxito"tipo="entregar">Buscarbotón>
forma>

Sin una acción de formulario que apunte a la ruta de su URL de búsqueda, su función de búsqueda no funcionará. Recuerde que la ruta de su URL de búsqueda debe apuntar a la vista de Django que maneja la lógica de su función de búsqueda.

Crear una función de búsqueda para múltiples campos de modelo

Si desea mejorar la experiencia del usuario de su aplicación web, puede permitir que sus usuarios busquen por más de un campo en su modelo. Por ejemplo, en una aplicación de blog, es posible que desee que su usuario busque en función de los títulos de las publicaciones o los nombres de los autores.

Para implementar esta función, debe utilizar el q objeto proporcionado por Django. Debes importar el q objeto en tu vistas.py archivo como este:

de django.db.modelos importar q

Después de importar q, debe modificar su función de vista de esta manera:

definitivamentepost_buscado(pedido):
si solicitud.método == 'CORREO':
search_query = solicitud. CORREO['consulta de busqueda']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
devolver hacer (pedir, 'aplicación/nombre_plantilla.html', {'consulta':consulta de busqueda, 'publicaciones':publicaciones})
demás:
devolver hacer (pedir, 'aplicación/nombre_plantilla.html',{})

En el programa anterior, el publicaciones La variable filtra el modelo por el título de la publicación o el nombre del autor. La función utiliza el O operador, en este caso, un símbolo de tubería, para realizar el filtro.

Mejorar la experiencia del usuario con una función de búsqueda

Una función de búsqueda en su aplicación web mejora efectivamente su experiencia de usuario y usabilidad general. Con Django, solo necesita aprovechar las funcionalidades integradas para que su función de búsqueda funcione, lo que brinda beneficios significativos para usted y sus usuarios.