Integrieren Sie die Suchfunktion mithilfe dieser Schritt-für-Schritt-Anleitung in Ihre Django-Anwendung.

Durch das Hinzufügen einer Suchfunktion zu Ihrer Webanwendung können Ihre Benutzer problemlos darin navigieren, indem sie nach dem suchen, was sie suchen. Django bietet integrierte Unterstützung für den Aufbau einer Suchfunktion mithilfe seiner leistungsstarken ORM- und Abfragetools. Mit Django können Sie verschiedene Suchtypen implementieren, darunter Stichwortsuchen, einfache Suchen und erweiterte Suchen mit Filtern.

Implementierung der Suchfunktion in Django

Django ermöglicht Ihnen mit seinen integrierten Methoden und Funktionen die Implementierung verschiedener Suchtypen. Sie können je nach Anwendungsfall eine einfache Stichwortsuche oder eine erweiterte Suche implementieren. Sie sollten eine erweiterte Suche implementieren, wenn Sie eine komplexe Anwendung haben, beispielsweise eine E-Commerce-Website, während eine einfache Stichwortsuche für weniger komplexe Projekte geeignet ist.

instagram viewer

Den in diesem Artikel verwendeten Code finden Sie unter GitHub Die Nutzung steht Ihnen unter der MIT-Lizenz kostenlos zur Verfügung.

Implementieren Sie eine einfache Schlüsselwortsuche in Django

Um eine einfache Suchfunktion zu erstellen, sollten Sie zunächst Ihre Suchleiste erstellen. Sie können Ihre Suchleiste in Ihrer Navigationsleiste erstellen. Bootstrap bietet eine vorgefertigte Navigationsleiste mit einer Suchleiste, und Sie können dies ganz einfach tun Integrieren Sie Bootstrap und seine Komponenten in Ihr Django-Projekt. Erstellen Sie Ihre Suchleiste in einer HTML-Datei und stellen Sie die Formularmethode auf ein POST, und geben Sie dem Eingabefeld a Name Attribut wie dieses:

<formKlasse=„d-flex“Rolle="suchen"Methode="POST">
 {% csrf_token %}
<Eingang
class="form-control me-NN"
type="suchen"
placeholder="Suchen"
name="search_query"
erforderlich aria-label="Suchen"
 >
<TasteKlasse=„btn btn-outline-success“Typ="einreichen">SuchenTaste>
form>

Im obigen Code lautet der Name des Eingabefelds Suchanfrage. Das Formular nutzt Djangos CSRF-Token Zu Verhindern Sie CSRF-Angriffe. Damit Ihre Suchleiste funktioniert, befolgen Sie diese Schritte.

Erstellen Sie eine Ansicht für die Suche

  • Öffne dein Ansichten.py Datei und importieren Sie Ihr Modell aus der models.py Datei:
aus .Modelle importieren Modellname
  • Erstellen Sie eine Ansichtsfunktion für die Suchfunktion:
defSuchfunktion(Anfrage):
# Überprüfen Sie, ob es sich bei der Anfrage um eine Post-Anfrage handelt.
Wenn request.method == 'POST':
# Rufen Sie die vom Benutzer eingegebene Suchanfrage ab
search_query = Anfrage. POST['Suchanfrage']
# Filtern Sie Ihr Modell nach der Suchanfrage
Beiträge = Model.objects.filter (fieldName__contains=search_query)
zurückkehren rendern (Anfrage, 'app/template_name.html', {'Anfrage':Suchanfrage, 'Beiträge':beiträge})
anders:
zurückkehren rendern (Anfrage, 'app/template_name.html',{})

Die obige Funktion prüft zunächst, ob der Client eine sendet POST Anfrage. Wenn die Prüfung erfolgreich ist, wird der Wert der Suchanfrage des Benutzers wie folgt abgerufen:

search_query = Anfrage. POST['Suchanfrage']

Auf Anfrage. POST[’search_query’], 'Suchanfrage' sollte durch den Namen des Eingabefelds Ihrer Suchleiste ersetzt werden.

Nachdem der Wert der Suchabfrage des Benutzers abgerufen wurde, filtert die Funktion das Modell mithilfe von __enthält Methode. Der __enthält Bei der Methode wird die Groß-/Kleinschreibung nicht beachtet. Um diese Methode zu verwenden, sollten Sie diesem Format folgen:

fieldName__contains

Wenn Sie beispielsweise möchten, dass Ihre Benutzer anhand eines Modellfelds mit dem Namen suchen Name, sollten Sie Ihren Code so ändern, dass er wie folgt aussieht:

name__contains=search_query

Schließlich rendert die Funktion eine Vorlage und übergibt die Suchabfrage und das gefilterte Modell als Kontext.

Wenn die Methode des Formulars jedoch nicht a ist POST Bei einer Anfrage rendert die Funktion eine Vorlage mit einem leeren Wörterbuch und verarbeitet die Suchabfrage nicht.

Erstellen Sie eine Vorlage für das Suchergebnis

  • Erstellen Sie eine HTML-Datei, um Ihre Suchergebnisse an die Clientseite zurückzugeben.
  • Geben Sie das Suchergebnis auf der Seite aus, damit der Benutzer es sehen kann. Der Code in Ihrer HTML-Datei sollte wie folgt aussehen:
{% wenn Abfrage %}
<div>
<div>
Schleife durch Suchabfrage
{% für Beitrag in Beiträgen %}
<div>
Suchanfrage zurückgeben
<P>{{post.title}}P>
div>
{% endfor %}
div>
div>
{% anders %}
Gibt eine Nachricht zurück, wenn der Benutzer keine Suchanfrage eingibt
<h1>Bitte geben Sie eine Suchanfrage einh1>
{% endif %}

Die obige HTML-Vorlage prüft, ob der Benutzer eine Suchanfrage in die Suchleiste eingibt. Wenn der Benutzer eine Suchanfrage eingibt, a for-Schleife durchläuft die Suchergebnisse und gibt sie an den Benutzer zurück. Wenn keine Suchabfrage vorhanden ist, wird eine Meldung angezeigt, in der der Benutzer eine Suchabfrage eingeben kann. Ein Fall, in dem es möglicherweise keine Suchanfrage gibt, ist, wenn Ihr Benutzer direkt zur URL geht, ohne die Suchleiste auszufüllen, d. h. wenn Ihr Benutzer eine URL wie z. B. eingibt mywebsite.com/search direkt in den Browser. Sie sollten sicherstellen, dass Sie verwenden Djangos Vorlagenvererbung in Ihrer HTML-Datei.

  • Ändern Sie Ihren HTML-Code so, dass eine Fehlermeldung zurückgegeben wird, wenn kein Suchergebnis vorhanden ist.
{% wenn Abfrage %}
<div>
<div>
Überprüfen Sie, ob ein Ergebnis in der Datenbank vorhanden ist
{% wenn Beiträge %}
Suchabfrage durchlaufen, wenn ein Ergebnis vorliegt
{% für Beitrag in Beiträgen %}
<div>
Suchanfrage zurückgeben
<P>{{post.title}}P>
div>
{% endfor %}
Gibt eine Nachricht zurück, wenn keine Ergebnisse gefunden werden.
{% anders %}
<h3>Keine Suchergebnisse gefundenh3>
{% endif %}
div>
div>
{% anders %}
<h1>Bitte geben Sie eine Suchanfrage einh1>
{% endif %}

Die neue HTML-Vorlage ermöglicht eine bessere Benutzererfahrung. Es führt eine bedingte Anweisung ein, um zu prüfen, ob ein Suchergebnis in der Datenbank verfügbar ist. Wenn dies der Fall ist, wird das Suchergebnis angezeigt. Andernfalls wird dem Benutzer eine Fehlermeldung gesendet.

Konfigurieren Sie Ihre URL-Muster

  • Wenn Sie dies noch nicht getan haben, erstellen Sie eine urls.py Datei in Ihrem App-Verzeichnis.
  • In deinem urls.py, Datei erstellen Sie ein URL-Muster für Ihre Suchseite:
aus django.urls importieren Weg
aus. importieren Ansichten

URL-Muster = [
Weg('suchen/', Ansichten.search_feature, name='Suchansicht'),
]

Das obige Programm importiert zunächst die Weg Funktion und die Ansichten Datei im Zusammenhang mit der App. Dann wird ein Pfad mit dem Namen erstellt Suchansicht für die Suchseite.

  • Fügen Sie Ihrer Suchleiste eine Formularaktion hinzu. Die Aktions-URL sollte auf den URL-Pfad verweisen, der der Suchansicht gewidmet ist. In diesem Fall zeigt das Formular auf Suchansicht.
<formKlasse=„d-flex“Rolle="suchen"Methode="POST"Aktion=„{% url ‚search-view‘ %}“>
<Eingang
class="form-control me-NN"
type="suchen"
placeholder="Nach etwas suchen"
name="search_query"
erforderlich aria-label="Suchen"
>
<TasteKlasse=„btn btn-outline-success“Typ="einreichen">SuchenTaste>
form>

Ohne eine Formularaktion, die auf Ihren Such-URL-Pfad verweist, funktioniert Ihre Suchfunktion nicht. Denken Sie daran, dass Ihr Such-URL-Pfad auf die Django-Ansicht verweisen muss, die die Logik Ihrer Suchfunktion verwaltet.

Erstellen Sie eine Suchfunktion für mehrere Modellfelder

Wenn Sie die Benutzererfahrung Ihrer Web-App verbessern möchten, können Sie Ihren Benutzern die Suche nach mehr als einem Feld in Ihrem Modell ermöglichen. In einer Blog-App möchten Sie beispielsweise, dass Ihr Benutzer anhand von Beitragstiteln oder Autorennamen sucht.

Um diese Funktion zu implementieren, sollten Sie die verwenden Q Objekt bereitgestellt von Django. Sie sollten die importieren Q Objekt in Ihrem Ansichten.py Datei wie folgt:

aus django.db.models importieren Q

Nach dem Import Q, sollten Sie Ihre Ansichtsfunktion wie folgt ändern:

defsearch_post(Anfrage):
Wenn request.method == 'POST':
search_query = Anfrage. POST['Suchanfrage']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
zurückkehren rendern (Anfrage, 'app/template_name.html', {'Anfrage':Suchanfrage, 'Beiträge':beiträge})
anders:
zurückkehren rendern (Anfrage, 'app/template_name.html',{})

Im obigen Programm ist das Beiträge Die Variable filtert das Modell entweder nach dem Beitragstitel oder dem Namen des Autors. Die Funktion verwendet die ODER Operator – in diesem Fall ein Pipe-Symbol – um den Filter durchzuführen.

Verbessern der Benutzererfahrung mit einer Suchfunktion

Eine Suchfunktion in Ihrer Webanwendung verbessert effektiv deren Benutzererfahrung und allgemeine Benutzerfreundlichkeit. Mit Django müssen Sie nur die integrierten Funktionen nutzen, um Ihre Suchfunktion zum Laufen zu bringen, was Ihnen und Ihren Benutzern erhebliche Vorteile bietet.