Integrirajte značajku pretraživanja u svoju Django aplikaciju pomoću ovog vodiča korak po korak.

Dodavanje značajke pretraživanja vašoj web-aplikaciji omogućuje korisnicima jednostavnu navigaciju tražeći ono što žele. Django pruža ugrađenu podršku za izgradnju značajke pretraživanja pomoću moćnog ORM-a i alata za upite. Uz Django možete implementirati različite vrste pretraživanja, uključujući pretraživanja po ključnim riječima, jednostavna pretraživanja i napredna pretraživanja s filtrima.

Implementacija funkcionalnosti pretraživanja u Djangu

Django vam omogućuje implementaciju različitih vrsta pretraživanja sa svojim ugrađenim metodama i funkcijama. Možete implementirati jednostavno pretraživanje po ključnim riječima ili napredno pretraživanje na temelju vašeg slučaja upotrebe. Trebali biste primijeniti napredno pretraživanje ako imate složenu aplikaciju, kao što je web mjesto za e-trgovinu, dok je jednostavno pretraživanje po ključnim riječima prikladno za manje složene projekte.

Kôd korišten u ovom članku može se pronaći na GitHub i besplatan je za korištenje pod MIT licencom.

instagram viewer

Implementirajte jednostavno pretraživanje ključnih riječi u Djangu

Da biste stvorili jednostavnu značajku pretraživanja, trebali biste započeti izgradnjom trake za pretraživanje. Traku za pretraživanje možete izgraditi u navigacijskoj traci. Bootstrap nudi gotovu navigacijsku traku s trakom za pretraživanje, a možete jednostavno integrirajte Bootstrap i njegove komponente u svoj Django projekt. Napravite traku za pretraživanje u HTML datoteci, postavite metodu obrasca na OBJAVI, i dajte polje za unos a Ime atribut ovako:

<oblikrazreda="d-flex"uloga="traži"metoda="POST">
 {% csrf_token %}
<ulazni
class="form-control me-NN"
tip="traži"
placeholder="Traži"
name="search_query"
potrebno aria-label="Traži"
 >
<dugmerazreda="btn btn-outline-success"tip="podnijeti">tražidugme>
oblik>

U gornjem kodu, naziv polja za unos je search_query. Obrazac koristi Djangov CSRF token do spriječiti CSRF napade. Kako bi vaša traka za pretraživanje radila, slijedite ove korake.

Stvorite prikaz za pretraživanje

  • Otvori svoju pogledi.py datoteku i uvezite svoj model iz modeli.py datoteka:
iz .modeli uvoz Ime modela
  • Stvorite funkciju prikaza za značajku pretraživanja:
defznačajka_pretraživanja(zahtjev):
# Provjerite je li zahtjev zahtjev za objavu.
ako zahtjev.metoda == 'POST':
# Dohvati upit za pretraživanje koji je unio korisnik
search_query = zahtjev. POST['search_query']
# Filtrirajte svoj model prema upitu za pretraživanje
postovi = Model.objects.filter (fieldName__contains=search_query)
povratak prikazati (zahtjev, 'aplikacija/naziv_predloška.html', {'upit':search_query, 'postovi':postovi})
drugo:
povratak prikazati (zahtjev, 'aplikacija/naziv_predloška.html',{})

Gornja funkcija prvo provjerava šalje li klijent a POST zahtjev. Ako provjera prođe, nastavlja se s dohvaćanjem vrijednosti korisničkog upita za pretraživanje ovako:

search_query = zahtjev. POST['search_query']

U zahtjevu. POST['search_query'], 'search_query' treba zamijeniti nazivom polja za unos vaše trake za pretraživanje.

Nakon dohvaćanja vrijednosti korisničkog upita za pretraživanje, funkcija filtrira model pomoću nje pomoću __sadrži metoda. The __sadrži metoda ne razlikuje velika i mala slova. Da biste koristili ovu metodu, trebali biste slijediti ovaj format:

naziv polja__sadrži

Na primjer, ako želite da vaši korisnici pretražuju na temelju polja modela tzv Ime, trebali biste izmijeniti svoj kod da izgleda ovako:

ime__sadrži=upit_za_pretraživanje

Na kraju, funkcija prikazuje predložak i prosljeđuje upit za pretraživanje i filtrirani model kao kontekst.

Međutim, ako metoda obrasca nije a POST zahtjev, funkcija prikazuje predložak s praznim rječnikom i ne obrađuje upit za pretraživanje.

Napravite predložak za rezultate pretraživanja

  • Izradite HTML datoteku da vratite rezultate pretraživanja na stranu klijenta.
  • Ispišite rezultat pretraživanja na stranici kako bi ga korisnik mogao vidjeti. Kôd u vašoj HTML datoteci trebao bi izgledati ovako:
{% if query %}
<div>
<div>
petlja kroz upit za pretraživanje
{% za objavu u objavama %}
<div>
vratiti upit za pretraživanje
<str>{{post.title}}str>
div>
{% endfor %}
div>
div>
{% else %}
vratiti poruku ako korisnik ne unese upit za pretraživanje
<h1>Unesite upit za pretraživanjeh1>
{% završi ako %}

Gornji HTML predložak provjerava unosi li korisnik upit za pretraživanje u traku za pretraživanje. Ako korisnik unese upit za pretraživanje, a za petlju prolazi kroz rezultate pretraživanja i vraća ih korisniku. Kada nema upita za pretraživanje, korisniku se prikazuje poruka da unese upit za pretraživanje. Slučaj u kojem možda nema upita za pretraživanje je ako vaš korisnik ode izravno na URL bez ispunjavanja trake za pretraživanje, tj. vaš korisnik unese URL kao što je mywebsite.com/search izravno u preglednik. Trebali biste osigurati da koristite Djangovo nasljeđe predloška u vašoj HTML datoteci.

  • Izmijenite svoj HTML kôd tako da vraća poruku o pogrešci ako nema rezultata pretraživanja.
{% if query %}
<div>
<div>
provjeriti postoji li rezultat u bazi podataka
{% ako objavljuje %}
proći kroz upit za pretraživanje ako postoji rezultat
{% za objavu u objavama %}
<div>
vratiti upit za pretraživanje
<str>{{post.title}}str>
div>
{% endfor %}
vratiti poruku ako nema rezultata.
{% else %}
<h3>Nema pronađenih rezultata pretraživanjah3>
{% završi ako %}
div>
div>
{% else %}
<h1>Unesite upit za pretraživanjeh1>
{% završi ako %}

Novi HTML predložak omogućuje bolje korisničko iskustvo. Uvodi uvjetnu izjavu za provjeru je li rezultat pretraživanja dostupan u bazi podataka. Ako postoji, prikazuje rezultat pretraživanja; inače korisniku šalje poruku o pogrešci.

Konfigurirajte svoje URL uzorke

  • Ako to niste učinili, stvorite urls.py datoteku u direktoriju vaše aplikacije.
  • U vašem urls.py, kreirajte obrazac URL-a za svoju stranicu za pretraživanje:
iz django.urls uvoz staza
iz. uvoz pogleda

url uzorci = [
staza('traži/', views.search_feature, name='search-view'),
]

Gornji program prvo uvozi staza funkcija i pogleda datoteka povezana s aplikacijom. Zatim stvara put pod nazivom pretraživanje-pogled za stranicu za pretraživanje.

  • Dodajte radnju obrasca u traku za pretraživanje. URL radnje trebao bi upućivati ​​na URL stazu posvećenu prikazu pretraživanja. U ovom slučaju obrazac ukazuje na pretraživanje-pogled.
<oblikrazreda="d-flex"uloga="traži"metoda="POST"akcijski="{% url 'search-view' %}">
<ulazni
class="form-control me-NN"
tip="traži"
placeholder="Traži nešto"
name="search_query"
potrebno aria-label="Traži"
>
<dugmerazreda="btn btn-outline-success"tip="podnijeti">tražidugme>
oblik>

Bez radnje obrasca koja upućuje na vašu URL stazu pretraživanja, vaša značajka pretraživanja neće raditi. Upamtite da vaš URL put pretraživanja mora upućivati ​​na Django prikaz koji upravlja logikom vaše značajke pretraživanja.

Stvorite značajku pretraživanja za više polja modela

Ako želite poboljšati korisničko iskustvo svoje web-aplikacije, možete dopustiti korisnicima da pretražuju prema više od jednog polja u vašem modelu. Na primjer, u aplikaciji za blog, možda želite da vaš korisnik pretražuje na temelju naslova postova ili imena autora.

Da biste implementirali ovu značajku, trebali biste koristiti Q objekt osigurao Django. Trebali biste uvesti Q objekt u vašem pogledi.py ovakva datoteka:

iz django.db.modeli uvoz Q

Nakon uvoza Q, trebali biste izmijeniti svoju funkciju prikaza ovako:

defsearch_post(zahtjev):
ako zahtjev.metoda == 'POST':
search_query = zahtjev. POST['search_query']
postovi = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
povratak prikazati (zahtjev, 'aplikacija/naziv_predloška.html', {'upit':search_query, 'postovi':postovi})
drugo:
povratak prikazati (zahtjev, 'aplikacija/naziv_predloška.html',{})

U gornjem programu, postovi varijabla filtrira model prema naslovu objave ili prema imenu autora. Funkcija koristi ILI operator—u ovom slučaju, simbol cijevi—za izvođenje filtra.

Poboljšanje korisničkog iskustva sa značajkom pretraživanja

Značajka pretraživanja u vašoj web aplikaciji učinkovito poboljšava korisničko iskustvo i ukupnu upotrebljivost. S Djangom trebate samo iskoristiti ugrađene funkcije kako bi vaša značajka pretraživanja radila, pružajući značajne prednosti za vas i vaše korisnike.