Integrujte funkciu vyhľadávania do svojej aplikácie Django pomocou tohto podrobného sprievodcu.

Pridanie funkcie vyhľadávania do vašej webovej aplikácie umožní vašim používateľom jednoducho sa v nej pohybovať vyhľadávaním toho, čo chcú. Django poskytuje vstavanú podporu pre vytváranie funkcie vyhľadávania pomocou svojich výkonných nástrojov ORM a dotazov. Pomocou Django môžete implementovať rôzne typy vyhľadávania vrátane vyhľadávania kľúčových slov, jednoduchého vyhľadávania a rozšíreného vyhľadávania pomocou filtrov.

Implementácia funkcie vyhľadávania v Django

Django vám pomocou vstavaných metód a funkcií umožňuje implementovať rôzne typy vyhľadávania. Môžete implementovať jednoduché vyhľadávanie podľa kľúčových slov alebo rozšírené vyhľadávanie na základe vášho prípadu použitia. Pokročilé vyhľadávanie by ste mali implementovať, ak máte komplexnú aplikáciu, napríklad webovú stránku elektronického obchodu, zatiaľ čo jednoduché vyhľadávanie podľa kľúčových slov je vhodné pre menej zložité projekty.

instagram viewer

Kód použitý v tomto článku nájdete na GitHub a môžete ho bezplatne používať na základe licencie MIT.

Implementujte jednoduché vyhľadávanie kľúčových slov v Django

Ak chcete vytvoriť jednoduchú funkciu vyhľadávania, mali by ste začať vytvorením vyhľadávacieho panela. Vyhľadávací panel si môžete vytvoriť na navigačnom paneli. Bootstrap poskytuje hotový navigačný panel s vyhľadávacím panelom a môžete ľahko integrujte Bootstrap a jeho komponenty do svojho projektu Django. Vytvorte vyhľadávací panel v súbore HTML a nastavte metódu formulára na Zverejniť, a zadajte vstupné pole a názov atribút takto:

<formulártrieda="d-flex"úlohu="Vyhľadávanie"metóda="POST">
 {% csrf_token %}
<vstup
class="form-control me-NN"
type="search"
placeholder="Hľadať"
name="search_query"
požadované aria-label="Hľadať"
 >
<tlačidlotrieda="btn btn-osnova-úspech"typu="Predložiť">Vyhľadávanietlačidlo>
formulár>

Vo vyššie uvedenom kóde je názov vstupného poľa Vyhľadávací dopyt. Formulár využíva Djangov token CSRF do zabrániť CSRF útokom. Ak chcete, aby váš vyhľadávací panel fungoval, postupujte podľa týchto krokov.

Vytvorte zobrazenie pre vyhľadávanie

  • Otvor tvoj views.py súbor a importujte svoj model z modely.py súbor:
od .modelky importovať Meno modela
  • Vytvorte funkciu zobrazenia pre funkciu vyhľadávania:
deffunkcia vyhľadávania(žiadosť):
# Skontrolujte, či je žiadosť žiadosťou o príspevok.
ak request.method == 'POST':
# Získajte vyhľadávací dopyt zadaný používateľom
search_query = požiadavka. Zverejniť['Vyhľadávací dopyt']
# Filtrujte svoj model podľa vyhľadávacieho dopytu
posts = Model.objects.filter (fieldName__contains=search_query)
vrátiť vykresliť (žiadosť, 'app/template_name.html', {'dopyt':Vyhľadávací dopyt, 'príspevky':príspevky})
inak:
vrátiť vykresliť (žiadosť, 'app/template_name.html',{})

Vyššie uvedená funkcia najskôr skontroluje, či klient posiela a POST žiadosť. Ak kontrola prebehne, pokračuje sa v načítaní hodnoty vyhľadávacieho dopytu používateľa takto:

search_query = požiadavka. Zverejniť['Vyhľadávací dopyt']

V žiadosti. ZVEREJNIŤ ['vyhľadávací_dopyt'], 'Vyhľadávací dopyt' by mal byť nahradený názvom vstupného poľa panela vyhľadávania.

Po získaní hodnoty používateľského vyhľadávacieho dotazu funkcia filtruje model pomocou neho pomocou __obsahuje metóda. The __obsahuje metóda nerozlišuje veľké a malé písmená. Ak chcete použiť túto metódu, mali by ste dodržiavať tento formát:

fieldName__contains

Ak napríklad chcete, aby vaši používatelia vyhľadávali na základe poľa modelu s názvom názov, mali by ste svoj kód upraviť tak, aby vyzeral takto:

name__contains=search_query

Nakoniec funkcia vykreslí šablónu a odovzdá vyhľadávací dopyt a filtrovaný model ako kontext.

Ak však metóda formulára nie je a POST požiada, funkcia vykreslí šablónu s prázdnym slovníkom a nespracuje vyhľadávací dopyt.

Vytvorte šablónu pre výsledok vyhľadávania

  • Ak chcete vrátiť výsledky vyhľadávania na stranu klienta, vytvorte súbor HTML.
  • Výstup výsledku vyhľadávania na stránku, aby ho mohol vidieť používateľ. Kód vo vašom súbore HTML by mal vyzerať takto:
{% ak dotaz %}
<div>
<div>
prechádzať vyhľadávacím dopytom
{% za príspevok v príspevkoch %}
<div>
vrátiť vyhľadávací dopyt
<p>{{post.title}}p>
div>
{% endfor %}
div>
div>
{% else %}
vrátiť správu, ak používateľ nezadá vyhľadávací dopyt
<h1>Zadajte vyhľadávací dopyth1>
{% koniec Ak %}

Vyššie uvedená šablóna HTML skontroluje, či používateľ zadá vyhľadávací dopyt do vyhľadávacieho panela. Ak používateľ zadá vyhľadávací dopyt, a pre slučku zacyklí výsledky vyhľadávania a vráti ich používateľovi. Ak neexistuje žiadny vyhľadávací dopyt, zobrazí sa používateľovi správa, aby zadal vyhľadávací dopyt. Prípad, kedy nemusí existovať žiadny vyhľadávací dopyt, je, ak váš používateľ prejde priamo na adresu URL bez vyplnenia vyhľadávacieho panela, t. j. váš používateľ zadá adresu URL, napr. mywebsite.com/search priamo do prehliadača. Mali by ste sa uistiť, že používate Dedičstvo šablóny Djanga vo vašom súbore HTML.

  • Upravte svoj HTML kód tak, aby vrátil chybové hlásenie, ak nie je k dispozícii žiadny výsledok vyhľadávania.
{% ak dotaz %}
<div>
<div>
skontrolujte, či je v databáze výsledok
{% if posts %}
prechádzať vyhľadávacím dopytom, ak existuje výsledok
{% za príspevok v príspevkoch %}
<div>
vrátiť vyhľadávací dopyt
<p>{{post.title}}p>
div>
{% endfor %}
vrátiť správu, ak sa nenašli žiadne výsledky.
{% else %}
<h3>Nenašli sa žiadne výsledky vyhľadávaniah3>
{% koniec Ak %}
div>
div>
{% else %}
<h1>Zadajte vyhľadávací dopyth1>
{% koniec Ak %}

Nová šablóna HTML umožňuje lepšiu používateľskú skúsenosť. Zavádza podmienený príkaz na kontrolu, či je v databáze dostupný výsledok vyhľadávania. Ak existuje, zobrazí výsledok vyhľadávania; v opačnom prípade odošle používateľovi chybové hlásenie.

Nakonfigurujte si vzory adries URL

  • Ak ste to neurobili, vytvorte súbor urls.py súbor v adresári aplikácie.
  • V tvojom urls.py, súbor vytvorte vzor adresy URL pre vašu stránku vyhľadávania:
od django.urls importovať cesta
od. importovať názory

urlpatterns = [
cesta ('Vyhľadávanie/', views.search_feature, name='search-view'),
]

Vyššie uvedený program najprv importuje súbor cesta funkcia a názory súbor súvisiaci s aplikáciou. Potom vytvorí cestu s názvom vyhľadávanie-zobrazenie pre stránku vyhľadávania.

  • Pridajte akciu formulára do vyhľadávacieho panela. Adresa URL akcie by mala ukazovať na cestu adresy URL vyhradenú pre zobrazenie vyhľadávania. V tomto prípade formulár ukazuje na vyhľadávanie-zobrazenie.
<formulártrieda="d-flex"úlohu="Vyhľadávanie"metóda="POST"akcie="{% url 'search-view' %}">
<vstup
class="form-control me-NN"
type="search"
placeholder="Hľadať niečo"
name="search_query"
požadované aria-label="Hľadať"
>
<tlačidlotrieda="btn btn-osnova-úspech"typu="Predložiť">Vyhľadávanietlačidlo>
formulár>

Bez akcie formulára, ktorá ukazuje na vašu cestu URL vyhľadávania, vaša funkcia vyhľadávania nebude fungovať. Pamätajte, že vaša cesta URL vyhľadávania musí ukazovať na zobrazenie Django, ktoré spracováva logiku vašej funkcie vyhľadávania.

Vytvorte funkciu vyhľadávania pre viaceré polia modelu

Ak chcete zlepšiť používateľské prostredie vašej webovej aplikácie, môžete používateľom umožniť vyhľadávanie podľa viac ako jedného poľa vo vašom modeli. Napríklad v blogovej aplikácii možno budete chcieť, aby váš používateľ hľadal na základe názvov príspevkov alebo mien autorov.

Na implementáciu tejto funkcie by ste mali použiť Q objekt, ktorý poskytol Django. Mali by ste importovať Q objekt vo vašom views.py súbor takto:

od django.db.models importovať Q

Po importe Q, mali by ste upraviť funkciu zobrazenia takto:

defsearch_post(žiadosť):
ak request.method == 'POST':
search_query = požiadavka. Zverejniť['Vyhľadávací dopyt']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
vrátiť vykresliť (žiadosť, 'app/template_name.html', {'dopyt':Vyhľadávací dopyt, 'príspevky':príspevky})
inak:
vrátiť vykresliť (žiadosť, 'app/template_name.html',{})

Vo vyššie uvedenom programe príspevky premenná filtruje model podľa názvu príspevku alebo mena autora. Funkcia využíva ALEBO operátor – v tomto prípade symbol potrubia – na vykonanie filtra.

Zlepšenie používateľského zážitku pomocou funkcie vyhľadávania

Funkcia vyhľadávania vo vašej webovej aplikácii efektívne zlepšuje jej používateľskú skúsenosť a celkovú použiteľnosť. S Django stačí využiť vstavané funkcie, aby vaša funkcia vyhľadávania fungovala a poskytovala vám a vašim používateľom významné výhody.