Интегришите функцију претраге у своју Дјанго апликацију користећи овај водич корак по корак.

Додавање функције претраге вашој веб апликацији омогућава вашим корисницима да се лако крећу у њој тражећи оно што желе. Дјанго пружа уграђену подршку за прављење функције претраживања користећи своје моћне ОРМ и алате за упите. Помоћу Дјанга можете имплементирати различите врсте претрага, укључујући претраге кључних речи, једноставне претраге и напредне претраге са филтерима.

Имплементација функционалности претраге у Дјангу

Дјанго вам омогућава да имплементирате различите врсте претраживања са својим уграђеним методама и функцијама. Можете имплементирати једноставну претрагу кључних речи или напредну претрагу на основу вашег случаја употребе. Требало би да примените напредну претрагу ако имате сложену апликацију, као што је веб локација за е-трговину, док је једноставна претрага по кључним речима погодна за мање сложене пројекте.

Код коришћен у овом чланку може се наћи на ГитХуб и бесплатан је за коришћење под МИТ лиценцом.

instagram viewer

Имплементирајте једноставну претрагу кључних речи у Дјангу

Да бисте креирали једноставну функцију претраге, требало би да почнете са изградњом траке за претрагу. Можете да направите траку за претрагу у својој навигационој траци. Боотстрап пружа готову навигациону траку са траком за претрагу и лако можете интегришите Боотстрап и његове компоненте у ваш Дјанго пројекат. Направите своју траку за претрагу у ХТМЛ датотеци, поставите метод обрасца на ПОШТА, и дајте поље за унос а име атрибут овако:

<формукласа="д-флек"улога="Претрага"методом="ПОШТА">
 {% цсрф_токен %}
<улазни
цласс="форм-цонтрол ме-НН"
типе="претрага"
плацехолдер="Тражи"
наме="сеарцх_куери"
потребна ариа-лабел="Тражи"
 >
<дугмекласа="бтн бтн-оутлине-суццесс"тип="прихвати">Претрагадугме>
форму>

У горњем коду, назив поља за унос је упит за претрагу. Форма користи од Дјангов ЦСРФ токен до спречити ЦСРФ нападе. Да би ваша трака за претрагу радила, следите ове кораке.

Направите приказ за претрагу

  • Отвори свој виевс.пи датотеку и увезите свој модел из модели.пи фајл:
из .модели увоз Назив модела
  • Направите функцију приказа за функцију претраге:
дефсеарцх_феатуре(захтев):
# Проверите да ли је захтев пост захтев.
ако рекуест.метход == 'ПОШТА':
# Преузми упит за претрагу који је унео корисник
сеарцх_куери = захтев. ПОШТА['упит за претрагу']
# Филтрирајте свој модел према упиту за претрагу
постови = Модел.објецтс.филтер (фиелдНаме__цонтаинс=сеарцх_куери)
повратак изнети (захтев, 'апп/темплате_наме.хтмл', {'упит':упит за претрагу, 'постови':постс})
друго:
повратак изнети (захтев, 'апп/темплате_наме.хтмл',{})

Горња функција прво проверава да ли клијент шаље а ПОШТА захтев. Ако провера прође, наставља се преузимање вредности корисничког упита за претрагу на следећи начин:

сеарцх_куери = захтев. ПОШТА['упит за претрагу']

На захтев. ПОСТ['сеарцх_куери'], 'упит за претрагу' треба заменити именом поља за унос ваше траке за претрагу.

Након преузимања вредности корисничког упита за претрагу, функција филтрира модел помоћу __садржи методом. Тхе __садржи метода не разликује велика и мала слова. Да бисте користили овај метод, требало би да пратите овај формат:

фиелдНаме__цонтаинс

На пример, ако желите да ваши корисници претражују на основу поља модела под називом име, требало би да измените свој код да изгледа овако:

наме__цонтаинс=упит_претражи

Коначно, функција приказује шаблон и прослеђује упит за претрагу и филтрирани модел као контекст.

Међутим, ако метода обрасца није а ПОШТА захтева, функција приказује шаблон са празним речником и не обрађује упит за претрагу.

Направите шаблон за резултат претраге

  • Направите ХТМЛ датотеку да бисте резултате претраге вратили на клијентску страну.
  • Изнесите резултат претраге на страницу да би их корисник могао видети. Код у вашој ХТМЛ датотеци би требао изгледати овако:
{% иф куери %}
<див>
<див>
петља кроз упит за претрагу
{% за пост у постовима %}
<див>
врати упит за претрагу
<стр>{{Наслов поста}}стр>
див>
{% ендфор %}
див>
див>
{% елсе %}
врати поруку ако корисник не унесе упит за претрагу
<х1>Унесите упит за претрагух1>
{% ендиф %}

Горњи ХТМЛ шаблон проверава да ли корисник унесе упит за претрагу у траку за претрагу. Ако корисник унесе упит за претрагу, а за петљу петља преко резултата претраге и враћа их кориснику. Када нема упита за претрагу, приказује се порука да корисник унесе упит за претрагу. Случај у којем можда нема упита за претрагу је ако ваш корисник оде директно на УРЛ без попуњавања траке за претрагу, тј. ваш корисник унесе УРЛ као нпр. мивебсите.цом/сеарцх директно у претраживач. Требало би да будете сигурни да користите Наслеђе Дјанго шаблона у вашој ХТМЛ датотеци.

  • Измените свој ХТМЛ код да бисте вратили поруку о грешци ако нема резултата претраге.
{% иф куери %}
<див>
<див>
проверите да ли постоји резултат у бази података
{% иф постови %}
проћи кроз упит за претрагу ако постоји резултат
{% за пост у постовима %}
<див>
врати упит за претрагу
<стр>{{Наслов поста}}стр>
див>
{% ендфор %}
вратите поруку ако нема пронађених резултата.
{% елсе %}
<х3>Није пронађен ниједан резултат претрагех3>
{% ендиф %}
див>
див>
{% елсе %}
<х1>Унесите упит за претрагух1>
{% ендиф %}

Нови ХТМЛ шаблон омогућава боље корисничко искуство. Он уводи условну изјаву да провери да ли је резултат претраге доступан у бази података. Ако постоји, приказује се резултат претраге; у супротном, шаље кориснику поруку о грешци.

Конфигуришите своје УРЛ обрасце

  • Ако то нисте урадили, креирајте а урлс.пи датотеку у директоријуму апликације.
  • У вашем урлс.пи, креирајте УРЛ образац за вашу страницу за претрагу:
из дјанго.урлс увоз пут
из. увоз погледа

урлпаттернс = [
пут('Претрага/', виевс.сеарцх_феатуре, наме='претрага-приказ'),
]

Горњи програм прво увози пут функција и погледа фајл који се односи на апликацију. Затим креира путању под називом сеарцх-виев за страницу за претрагу.

  • Додајте радњу обрасца у траку за претрагу. УРЛ радње треба да указује на путању УРЛ адресе посвећену приказу претраге. У овом случају, образац указује на сеарцх-виев.
<формукласа="д-флек"улога="Претрага"методом="ПОШТА"поступак=„{% урл 'сеарцх-виев' %}">
<улазни
цласс="форм-цонтрол ме-НН"
типе="претрага"
плацехолдер="Тражи нешто"
наме="сеарцх_куери"
потребна ариа-лабел="Тражи"
>
<дугмекласа="бтн бтн-оутлине-суццесс"тип="прихвати">Претрагадугме>
форму>

Без радње обрасца која указује на вашу УРЛ путању за претрагу, ваша функција претраге неће радити. Запамтите да ваша УРЛ путања за претрагу мора да указује на Дјанго приказ који управља логиком ваше функције претраге.

Направите функцију претраге за више поља модела

Ако желите да побољшате корисничко искуство своје веб апликације, можете дозволити корисницима да претражују по више од једног поља у вашем моделу. На пример, у апликацији за блог, можда бисте желели да ваш корисник претражује на основу наслова постова или имена аутора.

Да бисте применили ову функцију, требало би да користите П објекат који обезбеђује Дјанго. Требало би да увезете П објекат у свом виевс.пи фајл овако:

из дјанго.дб.моделс увоз П

Након увоза П, требало би да измените своју функцију приказа овако:

дефсеарцх_пост(захтев):
ако рекуест.метход == 'ПОШТА':
сеарцх_куери = захтев. ПОШТА['упит за претрагу']
постови = Пост.објецтс.филтер (К(наслов__ицонтаинс=упит_претражи) | К(аутхор__ицонтаинс=упит_претражи))
повратак изнети (захтев, 'апп/темплате_наме.хтмл', {'упит':упит за претрагу, 'постови':постс})
друго:
повратак изнети (захтев, 'апп/темплате_наме.хтмл',{})

У горњем програму, постова променљива филтрира модел према наслову поста или имену аутора. Функција користи ИЛИ оператор—у овом случају, симбол цеви—да изврши филтер.

Побољшање корисничког искуства помоћу функције претраге

Функција претраге у вашој веб апликацији ефикасно побољшава њено корисничко искуство и укупну употребљивост. Уз Дјанго, потребно је само да искористите уграђене функционалности да би ваша функција претраге функционисала, пружајући значајне предности вама и вашим корисницима.