Intégrez la fonction de recherche dans votre application Django à l'aide de ce guide étape par étape.

L'ajout d'une fonction de recherche à votre application Web permet à vos utilisateurs de la parcourir facilement en recherchant ce qu'ils veulent. Django fournit une prise en charge intégrée pour la création d'une fonction de recherche à l'aide de ses puissants outils ORM et de requête. Avec Django, vous pouvez implémenter différents types de recherches, y compris des recherches par mots-clés, des recherches simples et des recherches avancées avec des filtres.

Implémentation de la fonctionnalité de recherche dans Django

Django vous permet d'implémenter différents types de recherches avec ses méthodes et fonctions intégrées. Vous pouvez implémenter une simple recherche par mot-clé ou une recherche avancée en fonction de votre cas d'utilisation. Vous devez implémenter une recherche avancée si vous avez une application complexe, comme un site Web de commerce électronique, tandis qu'une simple recherche par mot clé convient aux projets moins complexes.

instagram viewer

Le code utilisé dans cet article se trouve sur GitHub et est libre d'utilisation sous la licence MIT.

Implémenter une recherche par mot-clé simple dans Django

Pour créer une fonction de recherche simple, vous devez commencer par créer votre barre de recherche. Vous pouvez créer votre barre de recherche dans votre barre de navigation. Amorcer fournit une barre de navigation prête à l'emploi avec une barre de recherche, et vous pouvez facilement intégrer Bootstrap et ses composants dans votre projet Django. Créez votre barre de recherche dans un fichier HTML, définissez la méthode du formulaire sur POSTE, et donner au champ de saisie un nom attribut comme celui-ci :

<formerclasse="d-flex"rôle="recherche"méthode="POSTE">
 {% csrf_token %}
<saisir
class="form-control me-NN"
type="recherche"
placeholder="Rechercher"
nom="recherche_requête"
requis aria-label="Rechercher"
 >
<boutonclasse="btn btn-contour-succès"taper="soumettre">Recherchebouton>
former>

Dans le code ci-dessus, le nom du champ de saisie est requête_recherche. Le formulaire utilise Jeton CSRF de Django pour empêcher les attaques CSRF. Pour que votre barre de recherche fonctionne, procédez comme suit.

Créer une vue pour la recherche

  • Ouvrez votre vues.py fichier et importez votre modèle à partir du modèles.py déposer:
depuis .des modèles importer Nom du modèle
  • Créez une fonction d'affichage pour la fonction de recherche:
définitivementfonction_recherche(demande):
# Vérifiez si la demande est une demande de publication.
si demande.méthode == 'POSTE':
# Récupérer la requête de recherche saisie par l'utilisateur
search_query = demande. POSTER['recherche_requête']
# Filtrez votre modèle par la requête de recherche
posts = Model.objects.filter (fieldName__contains=search_query)
retour rendre (demander, 'app/template_name.html', {'mettre en doute': requête_recherche, 'des postes':des postes})
autre:
retour rendre (demander, 'app/template_name.html',{})

La fonction ci-dessus vérifie d'abord si le client envoie un POSTE demande. Si la vérification réussit, elle continue à récupérer la valeur de la requête de recherche de l'utilisateur comme ceci :

search_query = demande. POSTER['recherche_requête']

En demande. POST['search_query'], 'recherche_requête' doit être remplacé par le nom du champ de saisie de votre barre de recherche.

Après avoir récupéré la valeur de la requête de recherche de l'utilisateur, la fonction filtre le modèle avec celle-ci en utilisant le __contient méthode. Le __contient La méthode est insensible à la casse. Pour utiliser cette méthode, vous devez suivre ce format :

fieldName__contains

Par exemple, si vous souhaitez que vos utilisateurs effectuent une recherche basée sur un champ de modèle appelé nom, vous devez modifier votre code pour qu'il ressemble à ceci :

name__contains=search_query

Enfin, la fonction restitue un modèle et transmet la requête de recherche et le modèle filtré comme contexte.

Cependant, si la méthode du formulaire n'est pas une POSTE request, la fonction restitue un modèle avec un dictionnaire vide et ne traite pas la requête de recherche.

Créer un modèle pour le résultat de la recherche

  • Créez un fichier HTML pour renvoyer vos résultats de recherche côté client.
  • Afficher le résultat de la recherche sur la page pour que l'utilisateur puisse le voir. Le code de votre fichier HTML devrait ressembler à ceci:
{% si requête %}
<div>
<div>
parcourir la requête de recherche
{% pour le message dans les messages %}
<div>
renvoyer la requête de recherche
<p>{{titre de l'article}}p>
div>
{% endfor %}
div>
div>
{% autre %}
renvoyer un message si l'utilisateur n'entre pas de requête de recherche
<h1>Veuillez entrer une requête de rechercheh1>
{% fin si %}

Le modèle HTML ci-dessus vérifie si l'utilisateur saisit une requête de recherche dans la barre de recherche. Si l'utilisateur saisit une requête de recherche, un pour la boucle boucle sur les résultats de la recherche et les renvoie à l'utilisateur. Lorsqu'il n'y a pas de requête de recherche, un message s'affiche pour que l'utilisateur entre une requête de recherche. Un cas où il pourrait ne pas y avoir de requête de recherche est si votre utilisateur accède directement à l'URL sans remplir la barre de recherche, c'est-à-dire que votre utilisateur saisit une URL telle que monsiteweb.com/recherche directement dans le navigateur. Vous devez vous assurer que vous utilisez L'héritage de template de Django dans votre fichier HTML.

  • Modifiez votre code HTML pour renvoyer un message d'erreur s'il n'y a pas de résultat de recherche.
{% si requête %}
<div>
<div>
vérifier s'il y a un résultat dans la base de données
{% si messages %}
parcourir la requête de recherche s'il y a un résultat
{% pour le message dans les messages %}
<div>
renvoyer la requête de recherche
<p>{{titre de l'article}}p>
div>
{% endfor %}
renvoie un message si aucun résultat n'est trouvé.
{% autre %}
<h3>Aucun résultat de recherche trouvéh3>
{% fin si %}
div>
div>
{% autre %}
<h1>Veuillez entrer une requête de rechercheh1>
{% fin si %}

Le nouveau modèle HTML permet une meilleure expérience utilisateur. Il introduit une instruction conditionnelle pour vérifier si un résultat de recherche est disponible dans la base de données. Si c'est le cas, il affiche le résultat de la recherche; sinon, il envoie un message d'erreur à l'utilisateur.

Configurez vos modèles d'URL

  • Si vous ne l'avez pas encore fait, créez un urls.py fichier dans le répertoire de votre application.
  • Dans ton urls.py, créer un modèle d'URL pour votre page de recherche:
depuis django.urls importer chemin
depuis. importer vues

modèles d'url = [
chemin('recherche/', vues.search_feature, nom='vue de recherche'),
]

Le programme ci-dessus importe d'abord le chemin fonction et la vues fichier lié à l'application. Ensuite, il crée un chemin nommé vue de recherche pour la page de recherche.

  • Ajoutez une action de formulaire à votre barre de recherche. L'URL d'action doit pointer vers le chemin d'URL dédié à la vue de recherche. Dans ce cas, le formulaire pointe vers vue de recherche.
<formerclasse="d-flex"rôle="recherche"méthode="POSTE"action="{% url 'search-view' %}">
<saisir
class="form-control me-NN"
type="recherche"
placeholder="Rechercher quelque chose"
nom="recherche_requête"
requis aria-label="Rechercher"
>
<boutonclasse="btn btn-contour-succès"taper="soumettre">Recherchebouton>
former>

Sans une action de formulaire pointant vers le chemin de votre URL de recherche, votre fonction de recherche ne fonctionnera pas. N'oubliez pas que votre chemin d'URL de recherche doit pointer vers la vue Django qui gère la logique de votre fonction de recherche.

Créer une fonction de recherche pour plusieurs champs de modèle

Si vous souhaitez améliorer l'expérience utilisateur de votre application Web, vous pouvez autoriser vos utilisateurs à rechercher plusieurs champs dans votre modèle. Par exemple, dans une application de blog, vous souhaiterez peut-être que votre utilisateur effectue une recherche en fonction des titres des articles ou des noms des auteurs.

Pour implémenter cette fonctionnalité, vous devez utiliser le Q objet fourni par Django. Vous devez importer le Q objet dans votre vues.py fichier comme celui-ci :

depuis django.db.models importer Q

Après l'importation Q, vous devez modifier votre fonction d'affichage comme ceci :

définitivementsearch_post(demande):
si demande.méthode == 'POSTE':
search_query = demande. POSTER['recherche_requête']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
retour rendre (demander, 'app/template_name.html', {'mettre en doute': requête_recherche, 'des postes':des postes})
autre:
retour rendre (demander, 'app/template_name.html',{})

Dans le programme ci-dessus, le des postes La variable filtre le modèle soit par le titre du message, soit par le nom de l'auteur. La fonction utilise le OU opérateur—dans ce cas, un symbole de barre verticale—pour effectuer le filtre.

Améliorer l'expérience utilisateur avec une fonction de recherche

Une fonction de recherche dans votre application Web améliore efficacement son expérience utilisateur et sa convivialité globale. Avec Django, il vous suffit de tirer parti des fonctionnalités intégrées pour faire fonctionner votre fonction de recherche, offrant des avantages significatifs pour vous et vos utilisateurs.