Integroi hakuominaisuus Django-sovellukseesi tämän vaiheittaisen oppaan avulla.

Kun lisäät verkkosovellukseesi hakuominaisuuden, käyttäjät voivat navigoida siinä helposti etsimällä haluamaansa. Django tarjoaa sisäänrakennetun tuen hakuominaisuuden rakentamiseen käyttämällä tehokkaita ORM- ja kyselytyökaluja. Djangon avulla voit toteuttaa erilaisia ​​​​hakuja, mukaan lukien avainsanahaut, yksinkertaiset haut ja tarkennetut haut suodattimilla.

Hakutoimintojen käyttöönotto Djangossa

Django mahdollistaa erityyppisten hakujen toteuttamisen sisäänrakennetuilla tavoilla ja toiminnoilla. Voit toteuttaa yksinkertaisen avainsanahaun tai tarkennetun haun käyttötapauksesi perusteella. Sinun tulisi ottaa käyttöön tarkennettu haku, jos sinulla on monimutkainen sovellus, kuten verkkokauppasivusto, kun taas yksinkertainen avainsanahaku sopii vähemmän monimutkaisiin projekteihin.

Tässä artikkelissa käytetty koodi löytyy osoitteesta GitHub ja sen käyttö on ilmaista MIT-lisenssin alaisena.

Ota käyttöön yksinkertainen avainsanahaku Djangossa

instagram viewer

Luodaksesi yksinkertaisen hakuominaisuuden, sinun tulee aloittaa rakentamalla hakupalkki. Voit rakentaa hakupalkin navigointipalkkiin. Bootstrap tarjoaa valmiin navigointipalkin hakupalkin kanssa, ja voit helposti integroi Bootstrap ja sen komponentit Django-projektiisi. Luo hakupalkki HTML-tiedostoon, aseta lomakemenetelmäksi LÄHETTÄÄ, ja anna syöttökenttään a nimi attribuutti näin:

<muodossaluokkaa="d-flex"rooli="Hae"menetelmä="LÄHETTÄÄ">
 {% csrf_token %}
<syöttö
class="form-control me-NN"
type="search"
placeholder="Hae"
nimi="hakukysely"
pakollinen aria-label="Haku"
 >
<-painikettaluokkaa="btn btn-outline-success"tyyppi="Lähetä">Hae-painiketta>
muodossa>

Yllä olevassa koodissa syöttökentän nimi on hakulauseke. Lomake hyödyntää Djangon CSRF-tunnus to estää CSRF-hyökkäykset. Saat hakupalkkisi toimimaan seuraavasti.

Luo näkymä haulle

  • Avaa sinun views.py tiedosto ja tuo mallisi tiedostosta mallit.py tiedosto:
alkaen .malleja tuonti Mallinimi
  • Luo näkymätoiminto hakuominaisuutta varten:
defhakuominaisuus(pyyntö):
# Tarkista, onko pyyntö postipyyntö.
jos request.method == 'LÄHETTÄÄ':
# Hae käyttäjän kirjoittama hakukysely
search_query = pyyntö. LÄHETTÄÄ['hakulauseke']
# Suodata mallisi hakukyselyn mukaan
posts = Model.objects.filter (fieldName__contains=search_query)
palata renderöi (pyyntö, 'app/template_name.html', {'kysely':hakulauseke, "viestit":posts})
muu:
palata renderöi (pyyntö, 'app/template_name.html',{})

Yllä oleva toiminto tarkistaa ensin, lähettääkö asiakas a LÄHETTÄÄ pyyntö. Jos tarkistus läpäisee, se hakee käyttäjän hakukyselyn arvon seuraavasti:

search_query = pyyntö. LÄHETTÄÄ['hakulauseke']

Pyynnöstä. POST['search_query'], 'hakulauseke' tulee korvata hakupalkin syöttökentän nimellä.

Haettuaan käyttäjän hakukyselyn arvon funktio suodattaa mallin sen avulla käyttämällä __sisältää menetelmä. The __sisältää menetelmässä kirjainkoolla ei ole merkitystä. Jos haluat käyttää tätä menetelmää, sinun tulee noudattaa tätä muotoa:

fieldName__contains

Jos esimerkiksi haluat käyttäjien tekevän hakuja mallikentän perusteella nimi, sinun tulee muokata koodia tältä:

nimi__contains=hakukysely

Lopuksi funktio tekee mallin ja välittää hakukyselyn ja suodatetun mallin kontekstina.

Jos lomakkeen menetelmä ei kuitenkaan ole a LÄHETTÄÄ pyynnöstä funktio tekee mallin tyhjästä sanakirjasta eikä käsittele hakukyselyä.

Luo malli hakutulokselle

  • Luo HTML-tiedosto palauttaaksesi hakutulokset asiakaspuolelle.
  • Näytä hakutulos sivulla käyttäjän nähtäväksi. HTML-tiedostosi koodin pitäisi näyttää tältä:
{% jos kysely %}
<div>
<div>
selata hakukyselyä
{% viestistä viesteissä %}
<div>
palauta hakukysely
<s>{{post.title}}s>
div>
{% endfor %}
div>
div>
{% muuta %}
palauttaa viestin, jos käyttäjä ei kirjoita hakukyselyä
<h1>Anna hakulausekeh1>
{% loppu Jos %}

Yllä oleva HTML-malli tarkistaa, kirjoittaako käyttäjä hakukyselyn hakupalkkiin. Jos käyttäjä kirjoittaa hakukyselyn, a silmukalle kiertää hakutuloksia ja palauttaa ne käyttäjälle. Kun hakukyselyä ei ole, näyttöön tulee viesti, jossa käyttäjä voi kirjoittaa hakukyselyn. Hakukyselyä ei ehkä ole, jos käyttäjäsi menee suoraan URL-osoitteeseen täyttämättä hakupalkkia, eli käyttäjä kirjoittaa URL-osoitteen, kuten mywebsite.com/search suoraan selaimeen. Sinun tulee varmistaa, että käytät Djangon mallin perintö HTML-tiedostossasi.

  • Muokkaa HTML-koodiasi palauttaaksesi virheilmoituksen, jos hakutulosta ei löydy.
{% jos kysely %}
<div>
<div>
tarkista onko tietokannassa tulos
{% if posts %}
käydä läpi hakukyselyä, jos on tulos
{% viestistä viesteissä %}
<div>
palauta hakukysely
<s>{{post.title}}s>
div>
{% endfor %}
palauta viesti, jos tuloksia ei löydy.
{% muuta %}
<h3>Hakutuloksia ei löytynyth3>
{% loppu Jos %}
div>
div>
{% muuta %}
<h1>Anna hakulausekeh1>
{% loppu Jos %}

Uusi HTML-malli mahdollistaa paremman käyttökokemuksen. Se ottaa käyttöön ehdollisen lausunnon, jolla tarkistetaan, onko hakutulos saatavilla tietokannassa. Jos on, se näyttää hakutuloksen; muussa tapauksessa se lähettää käyttäjälle virheilmoituksen.

Määritä URL-mallit

  • Jos et ole tehnyt tätä, luo a urls.py tiedosto sovellushakemistossasi.
  • Sinun urls.py, tiedosto luo URL-malli hakusivullesi:
alkaen django.urls tuonti polku
alkaen. tuonti näkymät

urlpatterns = [
polku ('Hae/', views.search_feature, name="hakunäkymä"),
]

Yllä oleva ohjelma tuo ensin polku toiminto ja näkymät sovellukseen liittyvä tiedosto. Sitten se luo polun nimeltä hakunäkymä hakusivulle.

  • Lisää lomaketoiminto hakupalkkiin. Toiminnon URL-osoitteen tulee osoittaa hakunäkymälle omistettuun URL-polkuun. Tässä tapauksessa lomake osoittaa hakunäkymä.
<muodossaluokkaa="d-flex"rooli="Hae"menetelmä="LÄHETTÄÄ"toiminta="{% url 'search-view' %}">
<syöttö
class="form-control me-NN"
type="search"
placeholder="Etsi jotain"
nimi="hakukysely"
pakollinen aria-label="Haku"
>
<-painikettaluokkaa="btn btn-outline-success"tyyppi="Lähetä">Hae-painiketta>
muodossa>

Ilman haku-URL-polkuun osoittavaa lomaketoimintoa hakutoiminto ei toimi. Muista, että haun URL-polun on osoitettava Django-näkymään, joka käsittelee hakuominaisuuden logiikkaa.

Luo hakutoiminto useille mallikentille

Jos haluat parantaa verkkosovelluksesi käyttökokemusta, voit antaa käyttäjien tehdä hakuja useamman kuin yhden kentän perusteella mallissasi. Esimerkiksi blogisovelluksessa saatat haluta käyttäjän tekevän hakuja julkaisujen tai kirjoittajien nimien perusteella.

Tämän ominaisuuden käyttöönottamiseksi sinun tulee käyttää K Djangon tarjoama esine. Sinun pitäisi tuoda K esine sisälläsi views.py tiedosto näin:

alkaen django.db.models tuonti K

Tuonnin jälkeen K, sinun tulee muokata näkymätoimintoasi seuraavasti:

defsearch_post(pyyntö):
jos request.method == 'LÄHETTÄÄ':
search_query = pyyntö. LÄHETTÄÄ['hakulauseke']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
palata renderöi (pyyntö, 'app/template_name.html', {'kysely':hakulauseke, "viestit":posts})
muu:
palata renderöi (pyyntö, 'app/template_name.html',{})

Yllä olevassa ohjelmassa viestit muuttuja suodattaa mallin joko postauksen otsikon tai kirjoittajan nimen mukaan. Toiminto käyttää TAI operaattoria – tässä tapauksessa putkisymbolia – suorittaa suodattimen.

Käyttökokemuksen parantaminen hakuominaisuuden avulla

Verkkosovelluksesi hakuominaisuus parantaa tehokkaasti sen käyttökokemusta ja yleistä käytettävyyttä. Djangon avulla sinun tarvitsee vain hyödyntää sisäänrakennettuja toimintoja saadaksesi hakuominaisuuden toimimaan, mikä tarjoaa merkittäviä etuja sinulle ja käyttäjillesi.