Integreerige otsingufunktsioon oma Django rakendusse, kasutades seda samm-sammult juhendit.
Otsingufunktsiooni lisamine oma veebirakendusele võimaldab kasutajatel hõlpsalt selles navigeerida, otsides seda, mida nad soovivad. Django pakub sisseehitatud tuge otsingufunktsiooni loomiseks, kasutades oma võimsaid ORM-i ja päringutööriistu. Django abil saate rakendada erinevat tüüpi otsinguid, sealhulgas märksõnaotsinguid, lihtsaid otsinguid ja täpsemaid otsinguid filtritega.
Otsingufunktsioonide rakendamine Djangos
Django võimaldab oma sisseehitatud meetodite ja funktsioonidega rakendada erinevat tüüpi otsinguid. Saate oma kasutusjuhtumi põhjal rakendada lihtsa märksõnaotsingu või täpsema otsingu. Kui teil on keeruline rakendus, näiteks e-kaubanduse veebisait, peaksite rakendama täpsemat otsingut, samas kui lihtne märksõnaotsing sobib vähem keerukate projektide jaoks.
Selles artiklis kasutatud koodi leiate aadressilt GitHub ja seda saate MIT-i litsentsi alusel tasuta kasutada.
Rakendage Djangos lihtsat märksõnaotsingut
Lihtsa otsingufunktsiooni loomiseks peaksite alustama otsinguriba loomisest. Saate luua otsinguriba navigeerimisribal. Bootstrap pakub valmis navigeerimisriba koos otsinguribaga ja saate hõlpsalt integreerige Bootstrap ja selle komponendid oma Django projekti. Looge oma otsinguriba HTML-failis, määrake vormimeetodiks POSTITA, ja andke sisestusväljale a nimi atribuut selline:
<vormiklass="d-flex"rolli="otsing"meetod="POSTITA">
{% csrf_token %}
<sisend
class="form-control me-NN"
type="otsing"
kohahoidja="Otsi"
name="otsingupäring"
kohustuslik aria-label="Otsi"
>
<nuppuklass="btn btn-outline-success"tüüp="Esita">Otsingnuppu>
vormi>
Ülaltoodud koodis on sisestusvälja nimi otsingu_päring. Vorm kasutab ära Django CSRF-i märk juurde vältida CSRF-i rünnakuid. Otsinguriba toimimiseks toimige järgmiselt.
Looge otsingu jaoks vaade
- Ava oma views.py faili ja importige oma mudel saidist mudelid.py fail:
alates .mudelid importida Mudeli nimi
- Looge otsingufunktsiooni jaoks vaatefunktsioon:
defotsingu_funktsioon(taotlus):
# Kontrollige, kas päring on postitamistaotlus.
kui taotlus.meetod == 'POSTI':
# Otsi kasutaja sisestatud otsingupäring
otsing_päring = päring. POSTITA['otsingu_päring']
# Filtreerige oma mudel otsingupäringu järgi
postitused = Model.objects.filter (fieldName__contains=search_query)
tagasi renderdama (päring, 'app/template_name.html', {'päring':otsingu_päring, 'postitused':posts})
muidu:
tagasi renderdama (päring, 'app/template_name.html',{})
Ülaltoodud funktsioon kontrollib esmalt, kas klient saadab a POSTITA nõuda. Kui kontroll läbib, hangib see kasutaja otsingupäringu väärtuse järgmiselt:
otsing_päring = päring. POSTITA['otsingu_päring']
Soovi korral. POST['search_query'], 'otsingu_päring' tuleks asendada teie otsinguriba sisestusvälja nimega.
Pärast kasutaja otsingupäringu väärtuse otsimist filtreerib funktsioon mudeli selle järgi, kasutades __sisaldab meetod. The __sisaldab meetod ei ole tõstutundlik. Selle meetodi kasutamiseks peaksite järgima järgmist vormingut:
väljanimi__sisaldab
Näiteks kui soovite, et teie kasutajad otsiksid mudelivälja alusel nimega nimi, peaksite oma koodi muutma, et see näeks välja selline:
name__contains=otsingu_päring
Lõpuks renderdab funktsioon malli ja edastab kontekstina otsingupäringu ja filtreeritud mudeli.
Kui aga vormi meetod ei ole a POSTITA päringu korral renderdab funktsioon tühja sõnastikuga malli ega töötle otsingupäringut.
Looge otsingutulemuste jaoks mall
- Looge HTML-fail, et tagastada oma otsingutulemused kliendi poolele.
- Väljastage otsingutulemus lehele, et kasutaja seda näeks. Teie HTML-failis olev kood peaks välja nägema järgmine:
{% kui päring %}
<div>
<div>
tsükkel läbi otsingupäringu
{% postituste kohta postitustes %}
<div>
tagasta otsingupäring
<lk>{{post.title}}lk>
div>
{% endfor %}
div>
div>
{% muu %}
tagastab sõnumi, kui kasutaja ei sisesta otsingupäringut
<h1>Palun sisestage otsingupäringh1>
{% endif %}
Ülaltoodud HTML-mall kontrollib, kas kasutaja sisestab otsinguribale otsingupäringu. Kui kasutaja sisestab otsingupäringu, a silmuse jaoks silmused üle otsingutulemuste ja tagastab need kasutajale. Kui otsingupäring puudub, kuvatakse kasutajale sõnum otsingupäringu sisestamiseks. Juhtum, kus otsingupäring võib puududa, on siis, kui teie kasutaja läheb otse URL-ile ilma otsinguriba täitmata, st teie kasutaja sisestab URL-i, näiteks mywebsite.com/search otse brauserisse. Peaksite tagama, et kasutate Django malli pärand oma HTML-failis.
- Kui otsingutulemust pole, muutke oma HTML-koodi, et tagastada veateade.
{% kui päring %}
<div>
<div>
kontrollige, kas andmebaasis on tulemus
{% if posts %}
tsüklit läbi otsingupäringu, kui tulemus on olemas
{% postituste kohta postitustes %}
<div>
tagasta otsingupäring
<lk>{{post.title}}lk>
div>
{% endfor %}
tagastage sõnum, kui tulemusi ei leitud.
{% muu %}
<h3>Otsingutulemusi ei leitudh3>
{% endif %}
div>
div>
{% muu %}
<h1>Palun sisestage otsingupäringh1>
{% endif %}
Uus HTML-mall võimaldab paremat kasutuskogemust. See tutvustab tingimuslauset, et kontrollida, kas otsingutulemus on andmebaasis saadaval. Kui on, kuvab see otsingutulemuse; vastasel juhul saadab see kasutajale veateate.
Konfigureerige oma URL-i mustrid
- Kui te pole seda teinud, looge a urls.py faili oma rakenduse kataloogis.
- Sinu urls.py, fail loo oma otsingulehele URL-i muster:
alates django.urls importida tee
alates. importida vaated
urlmustrid = [
tee ('otsing/', views.search_feature, name='otsinguvaade'),
]
Ülaltoodud programm impordib esmalt tee funktsioon ja vaated rakendusega seotud faili. Seejärel loob see tee nimega otsing-vaade otsingulehe jaoks.
- Lisage otsinguribale vormitoiming. Toimingu URL peaks osutama otsinguvaatele pühendatud URL-i teele. Sel juhul viitab vorm sellele otsing-vaade.
<vormiklass="d-flex"rolli="otsing"meetod="POSTITA"tegevust="{% url 'search-view' %}">
<sisend
class="form-control me-NN"
type="otsing"
placeholder="Otsi midagi"
name="otsingupäring"
kohustuslik aria-label="Otsi"
>
<nuppuklass="btn btn-outline-success"tüüp="Esita">Otsingnuppu>
vormi>
Ilma teie otsingu URL-i teele osutava vormitoiminguta teie otsingufunktsioon ei tööta. Pidage meeles, et teie otsingu URL-i tee peab osutama Django vaatele, mis käsitleb teie otsingufunktsiooni loogikat.
Looge otsingufunktsioon mitme mudelivälja jaoks
Kui soovite oma veebirakenduse kasutuskogemust parandada, võite lasta kasutajatel otsida oma mudelis rohkem kui ühe välja järgi. Näiteks võiksite ajaveebirakenduses soovida, et kasutaja otsiks postituste pealkirjade või autorite nimede alusel.
Selle funktsiooni rakendamiseks peaksite kasutama K Django pakutav objekt. Peaksite importima K objekt sinus views.py selline fail:
alates django.db.models importida K
Pärast importimist K, peaksite oma vaatefunktsiooni muutma järgmiselt:
defotsing_postitus(taotlus):
kui taotlus.meetod == 'POSTI':
otsing_päring = päring. POSTITA['otsingu_päring']
postitused = Post.objects.filter (Q(title__icontains=otsingu_päring) | Q(autori__ikoonid=otsingu_päring))
tagasi renderdama (päring, 'app/template_name.html', {'päring':otsingu_päring, 'postitused':posts})
muidu:
tagasi renderdama (päring, 'app/template_name.html',{})
Ülaltoodud programmis on postitusi muutuja filtreerib mudeli kas postituse pealkirja või autori nime järgi. Funktsioon kasutab VÕI operaator – antud juhul toru sümbol – filtri teostamiseks.
Kasutajakogemuse parandamine otsingufunktsiooniga
Teie veebirakenduse otsingufunktsioon parandab tõhusalt selle kasutajakogemust ja üldist kasutatavust. Django puhul peate oma otsingufunktsiooni tööle panemiseks kasutama ainult sisseehitatud funktsioone, pakkudes teile ja teie kasutajatele märkimisväärset kasu.