Integruokite paieškos funkciją į savo „Django“ programą naudodami šį nuoseklų vadovą.

Pridėjus paieškos funkciją prie žiniatinklio programos, naudotojai gali lengvai naršyti ieškodami to, ko nori. „Django“ teikia integruotą palaikymą kuriant paieškos funkciją, naudodamas galingus ORM ir užklausų įrankius. Naudodami „Django“ galite įgyvendinti įvairių tipų paieškas, įskaitant raktinių žodžių paieškas, paprastas paieškas ir išplėstines paieškas su filtrais.

Paieškos funkcijų diegimas „Django“.

„Django“ leidžia įgyvendinti įvairių tipų paieškas su integruotais metodais ir funkcijomis. Galite įdiegti paprastą raktinių žodžių paiešką arba išplėstinę paiešką pagal savo naudojimo atvejį. Jei turite sudėtingą programą, pvz., elektroninės prekybos svetainę, turėtumėte įdiegti išplėstinę paiešką, o paprasta paieška pagal raktinius žodžius tinka ne tokiems sudėtingiems projektams.

Šiame straipsnyje naudojamą kodą galite rasti adresu GitHub ir jūs galite nemokamai naudotis pagal MIT licenciją.

Įdiekite paprastą raktinių žodžių paiešką „Django“.

instagram viewer

Norėdami sukurti paprastą paieškos funkciją, pirmiausia turėtumėte sukurti paieškos juostą. Paieškos juostą galite sukurti naršymo juostoje. Bootstrap yra paruošta naršymo juosta su paieškos juosta, o jūs galite lengvai integruoti Bootstrap ir jo komponentus į savo Django projektą. Sukurkite paieškos juostą HTML faile, nustatykite formos metodą POST, ir įveskite įvesties lauką a vardas atributas toks:

<formaklasė="d-flex"vaidmenį="Paieška"metodas="POST">
 {% csrf_token %}
<įvestis
class="form-control me-NN"
type="paieška"
placeholder="Ieškoti"
name="paieškos_užklausa"
būtina aria-label="Ieškoti"
 >
<mygtukąklasė="btn btn-outline-success"tipo="Pateikti">Paieškamygtuką>
forma>

Aukščiau pateiktame kode įvesties lauko pavadinimas yra paieškos_užklausa. Forma naudojasi Django CSRF prieigos raktas į užkirsti kelią CSRF atakoms. Jei norite, kad paieškos juosta veiktų, atlikite šiuos veiksmus.

Sukurkite paieškos rodinį

  • Atidaryk savo views.py failą ir importuokite modelį iš modeliai.py failas:
 .modeliai importuoti Modelio vardas
  • Sukurkite paieškos funkcijos peržiūros funkciją:
defpaieškos_funkcija(užklausa):
# Patikrinkite, ar užklausa yra paskelbimo užklausa.
jeigu prašymas.metodas == „PASKELBTI“:
# Gaukite vartotojo įvestą paieškos užklausą
search_query = užklausa. PASKELBTI['paieškos_užklausa']
# Filtruokite modelį pagal paieškos užklausą
posts = Model.objects.filter (fieldName__contains=search_query)
grąžinti pateikti (prašyti, „app/template_name.html“, {"užklausa":search_query, "įrašai":posts})
Kitas:
grąžinti pateikti (prašyti, „app/template_name.html“,{})

Aukščiau pateikta funkcija pirmiausia patikrina, ar klientas siunčia a PAST prašymas. Jei patikrinimas bus sėkmingas, naudotojo paieškos užklausa bus gauta taip:

search_query = užklausa. PASKELBTI['paieškos_užklausa']

Pagal pageidavimą. POST['search_query'], „paieškos_užklausa“ turėtų būti pakeistas paieškos juostos įvesties lauko pavadinimu.

Gavusi vartotojo paieškos užklausos reikšmę, funkcija filtruoja modelį naudodama __yra metodas. The __yra metodas neskiria didžiųjų ir mažųjų raidžių. Norėdami naudoti šį metodą, turėtumėte vadovautis šiuo formatu:

fieldName__contains

Pavyzdžiui, jei norite, kad jūsų vartotojai ieškotų pagal modelio lauką, vadinamą vardas, turėtumėte pakeisti savo kodą, kad atrodytų taip:

name__contains=paieškos_užklausa

Galiausiai funkcija pateikia šabloną ir perduoda paieškos užklausą bei filtruotą modelį kaip kontekstą.

Tačiau jei formos metodas nėra a PAST užklausa, funkcija pateikia šabloną su tuščiu žodynu ir neapdoroja paieškos užklausos.

Sukurkite paieškos rezultato šabloną

  • Sukurkite HTML failą, kad paieškos rezultatai būtų grąžinti į kliento pusę.
  • Puslapyje išveskite paieškos rezultatą, kad vartotojas matytų. Kodas jūsų HTML faile turėtų atrodyti taip:
{% jei užklausa %}
<div>
<div>
kilpa per paieškos užklausą
{% įrašų įrašuose %}
<div>
grąžinti paieškos užklausą
<p>{{post.title}}p>
div>
{% endfor %}
div>
div>
{% Kitas %}
grąžinti pranešimą, jei vartotojas neįveda paieškos užklausos
<h1>Įveskite paieškos užklausąh1>
{% endif %}

Aukščiau pateiktas HTML šablonas patikrina, ar vartotojas įveda paieškos užklausą paieškos juostoje. Jei vartotojas įveda paieškos užklausą, a už kilpą peržiūri paieškos rezultatus ir grąžina juos vartotojui. Kai nėra paieškos užklausos, vartotojui rodomas pranešimas, kad jis turi įvesti paieškos užklausą. Paieškos užklausos gali nebūti, jei vartotojas eina tiesiai į URL neužpildęs paieškos juostos, t. y. vartotojas įveda URL, pvz. mywebsite.com/search tiesiai į naršyklę. Turėtumėte įsitikinti, kad naudojate Django šablono paveldėjimas savo HTML faile.

  • Pakeiskite HTML kodą, kad būtų pateiktas klaidos pranešimas, jei nėra paieškos rezultato.
{% jei užklausa %}
<div>
<div>
patikrinkite, ar duomenų bazėje yra rezultatas
{% if posts %}
peržiūrėkite paieškos užklausą, jei yra rezultatas
{% įrašų įrašuose %}
<div>
grąžinti paieškos užklausą
<p>{{post.title}}p>
div>
{% endfor %}
grąžinti pranešimą, jei nerasta rezultatų.
{% Kitas %}
<h3>Paieškos rezultatų nerastah3>
{% endif %}
div>
div>
{% Kitas %}
<h1>Įveskite paieškos užklausąh1>
{% endif %}

Naujasis HTML šablonas suteikia geresnę vartotojo patirtį. Jame pateikiamas sąlyginis teiginys, skirtas patikrinti, ar duomenų bazėje yra paieškos rezultatas. Jei yra, rodomas paieškos rezultatas; kitu atveju jis siunčia vartotojui klaidos pranešimą.

Konfigūruokite savo URL šablonus

  • Jei to nepadarėte, sukurkite a urls.py failą savo programų kataloge.
  • Jūsų urls.py, failą sukurkite savo paieškos puslapio URL šabloną:
 django.urls importuoti kelias
. importuoti Peržiūros

urlpatterns = [
kelias ('Paieška/', views.search_feature, name=„paieškos peržiūra“),
]

Aukščiau pateikta programa pirmiausia importuoja kelias funkcija ir Peržiūros su programa susijusį failą. Tada jis sukuria kelią pavadinimu paieškos rodinys paieškos puslapiui.

  • Pridėkite formos veiksmą į paieškos juostą. Veiksmo URL turi nurodyti URL kelią, skirtą paieškos rodiniui. Šiuo atveju forma nurodo paieškos rodinys.
<formaklasė="d-flex"vaidmenį="Paieška"metodas="POST"veiksmas="{% url 'search-view' %}">
<įvestis
class="form-control me-NN"
type="paieška"
placeholder="Ieškoti ko nors"
name="paieškos_užklausa"
būtina aria-label="Ieškoti"
>
<mygtukąklasė="btn btn-outline-success"tipo="Pateikti">Paieškamygtuką>
forma>

Be formos veiksmo, nukreipiančio į paieškos URL kelią, paieškos funkcija neveiks. Atminkite, kad jūsų paieškos URL kelias turi nukreipti į Django rodinį, kuris tvarko jūsų paieškos funkcijos logiką.

Sukurkite kelių modelių laukų paieškos funkciją

Jei norite pagerinti žiniatinklio programos naudotojų patirtį, galite leisti naudotojams ieškoti pagal daugiau nei vieną jūsų modelio lauką. Pavyzdžiui, tinklaraščio programoje galbūt norėsite, kad naudotojas ieškotų pagal įrašų pavadinimus arba autorių vardus.

Norėdami įdiegti šią funkciją, turėtumėte naudoti K Django suteiktas objektas. Turėtumėte importuoti K objektas tavo views.py failas toks:

 django.db.models importuoti K

Po importavimo K, turėtumėte pakeisti savo peržiūros funkciją taip:

defsearch_post(užklausa):
jeigu prašymas.metodas == „PASKELBTI“:
search_query = užklausa. PASKELBTI['paieškos_užklausa']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
grąžinti pateikti (prašyti, „app/template_name.html“, {"užklausa":search_query, "įrašai":posts})
Kitas:
grąžinti pateikti (prašyti, „app/template_name.html“,{})

Aukščiau pateiktoje programoje pranešimų kintamasis filtruoja modelį pagal įrašo pavadinimą arba autoriaus vardą. Funkcija naudoja ARBA operatorius – šiuo atveju vamzdžio simbolis – atlikti filtrą.

Vartotojo patirties gerinimas naudojant paieškos funkciją

Paieškos funkcija jūsų žiniatinklio programoje efektyviai pagerina naudotojo patirtį ir bendrą naudojimą. Naudodami „Django“, jums tereikia išnaudoti integruotas funkcijas, kad jūsų paieškos funkcija veiktų ir suteiktų didelę naudą jums ir jūsų vartotojams.