Integrați caracteristica de căutare în aplicația dvs. Django utilizând acest ghid pas cu pas.
Adăugarea unei funcții de căutare la aplicația dvs. web permite utilizatorilor să o navigheze cu ușurință, căutând ceea ce doresc. Django oferă suport încorporat pentru construirea unei funcții de căutare folosind instrumentele sale puternice ORM și de interogare. Cu Django, puteți implementa diferite tipuri de căutări, inclusiv căutări prin cuvinte cheie, căutări simple și căutări avansate cu filtre.
Implementarea funcției de căutare în Django
Django vă permite să implementați diferite tipuri de căutări cu metodele și funcțiile sale încorporate. Puteți implementa o căutare simplă prin cuvinte cheie sau o căutare avansată pe baza cazului dvs. de utilizare. Ar trebui să implementați o căutare avansată dacă aveți o aplicație complexă, cum ar fi un site de comerț electronic, în timp ce o căutare simplă de cuvinte cheie este potrivită pentru proiecte mai puțin complexe.
Codul folosit în acest articol poate fi găsit pe GitHub și este gratuit pentru utilizare sub licența MIT.
Implementați o căutare simplă de cuvinte cheie în Django
Pentru a crea o funcție simplă de căutare, ar trebui să începeți prin a vă construi bara de căutare. Puteți construi bara de căutare în bara de navigare. Bootstrap oferă o bară de navigare gata făcută cu o bară de căutare și puteți cu ușurință integrați Bootstrap și componentele sale în proiectul dvs. Django. Creați bara de căutare într-un fișier HTML, setați metoda formularului la POST, și dați câmpul de intrare a Nume atribut ca acesta:
<formăclasă="d-flex"rol="căutare"metodă="POST">
{% csrf_token %}
<intrare
class="form-control me-NN"
tip="cautare"
placeholder="Căutare"
name="search_query"
obligatoriu aria-label="Căutare"
>
<butonclasă=„btn btn-outline-succes”tip="Trimite">Căutarebuton>
formă>
În codul de mai sus, numele câmpului de introducere este căutare_interogare. Formula face uz de Jetonul CSRF al lui Django la prevenirea atacurilor CSRF. Pentru ca bara de căutare să funcționeze, urmați acești pași.
Creați o vizualizare pentru căutare
- Deschide-ți vederi.py fișier și importați modelul dvs. din modele.py fişier:
din .modele import Numele modelului
- Creați o funcție de vizualizare pentru funcția de căutare:
defcaracteristică_căutare(cerere):
# Verificați dacă solicitarea este o cerere post.
dacă cerere.metodă == 'POST':
# Preluați interogarea de căutare introdusă de utilizator
search_query = cerere. POST[„căutare_interogare”]
# Filtrați modelul după interogarea de căutare
posturi = Model.objects.filter (fieldName__contains=search_query)
întoarcere randa (cerere, „app/template_name.html”, {"interogare":search_query, „postări”:postări})
altfel:
întoarcere randa (cerere, „app/template_name.html”,{})
Funcția de mai sus verifică mai întâi dacă clientul trimite un POST cerere. Dacă verificarea trece, aceasta continuă să recupereze valoarea interogării de căutare a utilizatorului astfel:
search_query = cerere. POST[„căutare_interogare”]
La cerere. POST[’search_query’], „căutare_interogare” ar trebui înlocuit cu numele câmpului de introducere al barei de căutare.
După ce a preluat valoarea interogării de căutare a utilizatorului, funcția filtrează modelul cu aceasta, folosind __contine metodă. The __contine metoda este insensibilă la majuscule. Pentru a utiliza această metodă, ar trebui să urmați acest format:
fieldName__contains
De exemplu, dacă doriți ca utilizatorii dvs. să caute pe baza unui câmp de model numit Nume, ar trebui să vă modificați codul pentru a arăta astfel:
name__contains=căutare_interogare
În cele din urmă, funcția redă un șablon și transmite interogarea de căutare și modelul filtrat ca context.
Cu toate acestea, dacă metoda formularului nu este a POST cerere, funcția redă un șablon cu un dicționar gol și nu procesează interogarea de căutare.
Creați un șablon pentru rezultatul căutării
- Creați un fișier HTML pentru a returna rezultatele căutării în partea clientului.
- Afișați rezultatul căutării pe pagină pentru ca utilizatorul să-l vadă. Codul din fișierul HTML ar trebui să arate astfel:
{% if interogare %}
<div>
<div>
parcurge interogarea de căutare
{% pentru postări în postări %}
<div>
returnează interogarea de căutare
<p>{{post.title}}p>
div>
{% endfor %}
div>
div>
{% altfel %}
returnează un mesaj dacă utilizatorul nu introduce o interogare de căutare
<h1>Vă rugăm să introduceți o interogare de căutareh1>
{% endif %}
Șablonul HTML de mai sus verifică dacă utilizatorul introduce o interogare de căutare în bara de căutare. Dacă utilizatorul introduce o interogare de căutare, a pentru buclă trece peste rezultatele căutării și le returnează utilizatorului. Când nu există nicio interogare de căutare, este afișat un mesaj pentru ca utilizatorul să introducă o interogare de căutare. Un caz în care s-ar putea să nu existe o interogare de căutare este dacă utilizatorul dvs. merge direct la adresa URL fără a completa bara de căutare, adică utilizatorul introduce o adresă URL, cum ar fi site-ul meu.com/search direct în browser. Ar trebui să vă asigurați că utilizați Moștenirea șablonului lui Django în fișierul dvs. HTML.
- Modificați codul HTML pentru a returna un mesaj de eroare dacă nu există niciun rezultat al căutării.
{% if interogare %}
<div>
<div>
verificați dacă există un rezultat în baza de date
{% if posts %}
parcurge interogarea de căutare dacă există un rezultat
{% pentru postări în postări %}
<div>
returnează interogarea de căutare
<p>{{post.title}}p>
div>
{% endfor %}
returnează un mesaj dacă nu s-au găsit rezultate.
{% altfel %}
<h3>Nu s-au găsit rezultate de căutareh3>
{% endif %}
div>
div>
{% altfel %}
<h1>Vă rugăm să introduceți o interogare de căutareh1>
{% endif %}
Noul șablon HTML permite o experiență mai bună pentru utilizator. Introduce o instrucțiune condiționată pentru a verifica dacă un rezultat al căutării este disponibil în baza de date. Dacă există, afișează rezultatul căutării; în caz contrar, trimite utilizatorului un mesaj de eroare.
Configurați modelele dvs. URL
- Dacă nu ați făcut acest lucru, creați un urls.py fișier în directorul aplicației dvs.
- În dumneavoastră urls.py, fișier creați un model URL pentru pagina dvs. de căutare:
din django.urls import cale
din. import vederi
urlpatterns = [
cale('căutare/', views.search_feature, name=„căutare-vizualizare”),
]
Programul de mai sus importă mai întâi fișierul cale funcția și vederi fișier legat de aplicație. Apoi creează o cale numită căutare-vizualizare pentru pagina de căutare.
- Adăugați o acțiune de formular în bara de căutare. Adresa URL a acțiunii ar trebui să indice calea URL dedicată vizualizării de căutare. În acest caz, formularul indică căutare-vizualizare.
<formăclasă="d-flex"rol="căutare"metodă="POST"acțiune=„{% url „search-view” %}”>
<intrare
class="form-control me-NN"
tip="cautare"
placeholder="Căutați ceva"
name="search_query"
obligatoriu aria-label="Căutare"
>
<butonclasă=„btn btn-outline-succes”tip="Trimite">Căutarebuton>
formă>
Fără o acțiune din formular care să indice calea URL de căutare, funcția de căutare nu va funcționa. Rețineți că calea URL de căutare trebuie să indice spre vizualizarea Django care se ocupă de logica caracteristicii dvs. de căutare.
Creați o funcție de căutare pentru mai multe câmpuri de model
Dacă doriți să îmbunătățiți experiența utilizatorului aplicației dvs. web, puteți permite utilizatorilor să caute după mai multe câmpuri din modelul dvs. De exemplu, într-o aplicație de blog, ați putea dori ca utilizatorul dvs. să caute pe baza titlurilor postărilor sau a numelor autorilor.
Pentru a implementa această caracteristică, ar trebui să utilizați Q obiect oferit de Django. Ar trebui să importați Q obiect în dvs vederi.py fisier ca acesta:
din django.db.modele import Q
După import Q, ar trebui să vă modificați funcția de vizualizare astfel:
defcăutare_post(cerere):
dacă cerere.metodă == 'POST':
search_query = cerere. POST[„căutare_interogare”]
postări = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
întoarcere randa (cerere, „app/template_name.html”, {"interogare":search_query, „postări”:postări})
altfel:
întoarcere randa (cerere, „app/template_name.html”,{})
În programul de mai sus, postări variabila filtrează modelul fie după titlul postării, fie după numele autorului. Funcția folosește SAU operator — în acest caz, un simbol de conductă — pentru a efectua filtrul.
Îmbunătățirea experienței utilizatorului cu o funcție de căutare
O funcție de căutare în aplicația dvs. web îmbunătățește efectiv experiența utilizatorului și gradul de utilizare general. Cu Django, trebuie doar să profitați de funcționalitățile încorporate pentru a face funcția de căutare să funcționeze, oferind beneficii semnificative pentru dvs. și utilizatorii dvs.