Интегрирайте функцията за търсене във вашето приложение Django, като използвате това ръководство стъпка по стъпка.

Добавянето на функция за търсене към вашето уеб приложение позволява на вашите потребители да го навигират лесно, като търсят това, което искат. Django предоставя вградена поддръжка за изграждане на функция за търсене, като използва своите мощни ORM и инструменти за заявки. С Django можете да прилагате различни видове търсения, включително търсения по ключови думи, прости търсения и разширени търсения с филтри.

Внедряване на функционалност за търсене в Django

Django ви позволява да прилагате различни видове търсения с вградените си методи и функции. Можете да приложите просто търсене по ключови думи или разширено търсене въз основа на вашия случай на употреба. Трябва да приложите разширено търсене, ако имате сложно приложение, като уебсайт за електронна търговия, докато обикновеното търсене по ключови думи е подходящо за по-малко сложни проекти.

Кодът, използван в тази статия, може да бъде намерен на GitHub и е безплатен за използване под лиценза на MIT.

instagram viewer

Приложете просто търсене по ключови думи в Django

За да създадете проста функция за търсене, трябва да започнете с изграждането на вашата лента за търсене. Можете да изградите своя лента за търсене в лентата за навигация. Bootstrap предоставя готова навигационна лента с лента за търсене и можете лесно интегрирайте Bootstrap и неговите компоненти във вашия Django проект. Създайте лентата си за търсене в HTML файл, задайте метода на формуляра на ПУБЛИКАЦИЯ, и дайте полето за въвеждане a име атрибут като този:

<формаклас="d-flex"роля="Търсене"метод="ПУБЛИКУВАНЕ">
 {% csrf_token %}
<вход
class="form-control me-NN"
тип="търсене"
placeholder="търсене"
име="търсене_заявка"
задължително aria-label="Търсене"
 >
<бутонклас="btn btn-outline-success"Тип="Изпращане">Търсенебутон>
форма>

В горния код името на полето за въвеждане е заявка за търсене. Формата използва CSRF токен на Django да се предотвратяване на CSRF атаки. За да накарате лентата си за търсене да работи, следвайте тези стъпки.

Създайте изглед за търсенето

  • Отвори си views.py файл и импортирайте вашия модел от models.py файл:
от .модели импортиране Име на модела
  • Създайте функция за изглед за функцията за търсене:
деффункция_търсене(заявка):
# Проверете дали заявката е заявка за публикуване.
ако request.method == „ПУБЛИКУВАНЕ“:
# Извличане на заявката за търсене, въведена от потребителя
search_query = заявка. ПУБЛИКУВАНЕ['търсене_заявка']
# Филтрирайте вашия модел по заявката за търсене
публикации = Model.objects.filter (fieldName__contains=search_query)
връщане изобразяване (заявка, 'приложение/име_на_шаблон.html', {"запитване":търсене_заявка, "постове":постове})
друго:
връщане изобразяване (заявка, 'приложение/име_на_шаблон.html',{})

Горната функция първо проверява дали клиентът изпраща a ПУБЛИКУВАНЕ искане. Ако проверката е успешна, тя продължава да извлича стойността на заявката за търсене на потребителя по следния начин:

search_query = заявка. ПУБЛИКУВАНЕ['търсене_заявка']

При поискване. POST ['търсене_заявка'], „търсене_заявка“ трябва да се замени с името на полето за въвеждане на лентата за търсене.

След като извлече стойността на заявката за търсене на потребителя, функцията филтрира модела с нея, като използва __съдържа метод. The __съдържа методът не е чувствителен към главни и малки букви. За да използвате този метод, трябва да следвате този формат:

fieldName__contains

Например, ако искате вашите потребители да търсят въз основа на моделно поле, наречено име, трябва да промените кода си така, че да изглежда така:

име__съдържа=заявка_за_търсене

Накрая функцията изобразява шаблон и предава заявката за търсене и филтрирания модел като контекст.

Ако обаче методът на формуляра не е a ПУБЛИКУВАНЕ request, функцията изобразява шаблон с празен речник и не обработва заявката за търсене.

Създайте шаблон за резултата от търсенето

  • Създайте HTML файл, за да върнете резултатите от търсенето на клиента.
  • Изведете резултата от търсенето на страницата, за да го види потребителят. Кодът във вашия HTML файл трябва да изглежда така:
{% if query %}
<див>
<див>
преминаване през заявка за търсене
{% за публикация в публикации %}
<див>
върне заявка за търсене
<стр>{{post.title}}стр>
див>
{% endfor %}
див>
див>
{% else %}
връща съобщение, ако потребителят не въведе заявка за търсене
<h1>Моля, въведете заявка за търсенеh1>
{% endif %}

Горният HTML шаблон проверява дали потребителят въвежда заявка за търсене в лентата за търсене. Ако потребителят въведе заявка за търсене, a за цикъл преминава през резултатите от търсенето и ги връща на потребителя. Когато няма заявка за търсене, се показва съобщение за потребителя да въведе заявка за търсене. Случай, при който може да няма заявка за търсене, е ако вашият потребител отиде директно на URL адреса, без да попълни лентата за търсене, т.е. потребителят ви въведе URL адрес като mywebsite.com/търсене директно в браузъра. Трябва да сте сигурни, че използвате Наследяване на шаблон на Django във вашия HTML файл.

  • Променете своя HTML код, за да връща съобщение за грешка, ако няма резултат от търсенето.
{% if query %}
<див>
<див>
проверете дали има резултат в базата данни
{% if posts %}
прегледайте заявката за търсене, ако има резултат
{% за публикация в публикации %}
<див>
върне заявка за търсене
<стр>{{post.title}}стр>
див>
{% endfor %}
върне съобщение, ако няма намерени резултати.
{% else %}
<h3>Няма намерени резултати от търсенетоh3>
{% endif %}
див>
див>
{% else %}
<h1>Моля, въведете заявка за търсенеh1>
{% endif %}

Новият HTML шаблон позволява по-добро потребителско изживяване. Той въвежда условен израз за проверка дали резултатът от търсенето е наличен в базата данни. Ако има, показва резултата от търсенето; в противен случай той изпраща на потребителя съобщение за грешка.

Конфигурирайте вашите URL модели

  • Ако не сте направили това, създайте a urls.py файл в директорията на вашето приложение.
  • Във вашия urls.py, файл създайте модел на URL за вашата страница за търсене:
от django.urls импортиране път
от. импортиране изгледи

urlpatterns = [
път ('Търсене/', views.search_feature, име='търсене-изглед'),
]

Горната програма първо импортира път функция и изгледи файл, свързан с приложението. След това създава път с име търсене-изглед за страницата за търсене.

  • Добавете действие за формуляр към лентата за търсене. URL адресът на действието трябва да сочи към URL пътя, предназначен за изгледа за търсене. В този случай формулярът сочи към търсене-изглед.
<формаклас="d-flex"роля="Търсене"метод="ПУБЛИКУВАНЕ"действие="{% url 'search-view' %}">
<вход
class="form-control me-NN"
тип="търсене"
placeholder="Търсете нещо"
име="търсене_заявка"
задължително aria-label="Търсене"
>
<бутонклас="btn btn-outline-success"Тип="Изпращане">Търсенебутон>
форма>

Без действие на формуляр, сочещо към вашия URL път за търсене, функцията ви за търсене няма да работи. Не забравяйте, че вашият URL път за търсене трябва да сочи към Django изгледа, който управлява логиката на вашата функция за търсене.

Създайте функция за търсене за множество полета на модела

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

За да приложите тази функция, трябва да използвате Q обект, предоставен от Django. Трябва да импортирате Q обект във вашия views.py файл като този:

от django.db.models импортиране Q

След импортиране Q, трябва да промените функцията си за изглед по следния начин:

дефsearch_post(заявка):
ако request.method == „ПУБЛИКУВАНЕ“:
search_query = заявка. ПУБЛИКУВАНЕ['търсене_заявка']
публикации = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
връщане изобразяване (заявка, 'приложение/име_на_шаблон.html', {"запитване":търсене_заявка, "постове":постове})
друго:
връщане изобразяване (заявка, 'приложение/име_на_шаблон.html',{})

В програмата по-горе, публикации променливата филтрира модела или по заглавието на публикацията, или по името на автора. Функцията използва ИЛИ оператор — в този случай символ на тръба — за извършване на филтъра.

Подобряване на потребителското изживяване с функция за търсене

Функция за търсене във вашето уеб приложение ефективно подобрява потребителското изживяване и общата използваемост. С Django трябва само да използвате вградените функционалности, за да накарате функцията си за търсене да работи, осигурявайки значителни предимства за вас и вашите потребители.