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

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

Реализация функции поиска в Django

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

Код, использованный в этой статье, можно найти на Гитхаб и вы можете использовать его бесплатно по лицензии MIT.

instagram viewer

Реализуйте простой поиск по ключевым словам в Django

Чтобы создать простую функцию поиска, вы должны начать с создания панели поиска. Вы можете создать панель поиска на панели навигации. Начальная загрузка предоставляет готовую панель навигации с панелью поиска, и вы можете легко интегрируйте Bootstrap и его компоненты в ваш проект Django. Создайте панель поиска в файле HTML, установите метод формы на ПОЧТА, и дайте поле ввода a имя такой атрибут:

<формасорт="д-флекс"роль="поиск"метод="ПОЧТА">
 {% csrf_token%}
<вход
class="form-control me-NN"
тип = "поиск"
заполнитель = "Поиск"
имя = "search_query"
требуется aria-label="Поиск"
 >
<кнопкасорт="btn btn-контур-успех"тип="представлять на рассмотрение">Поисккнопка>
форма>

В приведенном выше коде имя поля ввода поисковый запрос. Форма использует Токен Django CSRF к предотвратить CSRF-атаки. Чтобы заставить панель поиска работать, выполните следующие действия.

Создайте представление для поиска

  • Откройте свой просмотры.py файл и импортируйте свою модель из модели.py файл:
от .модели Импортировать Название модели
  • Создайте функцию просмотра для функции поиска:
дефsearch_feature(запрос):
# Проверяем, является ли запрос почтовым.
если запрос.метод == 'ПОЧТА':
# Получить поисковый запрос, введенный пользователем
поиск_запрос = запрос. ПОЧТА['поисковый запрос']
# Отфильтруйте свою модель по поисковому запросу
сообщения = Model.objects.filter (fieldName__contains=search_query)
возвращаться оказывать (запрос, 'имя_приложения/template_name.html', {'запрос':поисковый запрос, 'сообщения':посты})
еще:
возвращаться оказывать (запрос, 'имя_приложения/template_name.html',{})

Приведенная выше функция сначала проверяет, отправляет ли клиент ПОЧТА запрос. Если проверка проходит успешно, она получает значение поискового запроса пользователя следующим образом:

поиск_запрос = запрос. ПОЧТА['поисковый запрос']

В запросе. POST[’search_query’], 'поисковый запрос' следует заменить именем поля ввода вашей панели поиска.

После получения значения поискового запроса пользователя функция фильтрует модель с ним, используя __содержит метод. __содержит метод нечувствителен к регистру. Чтобы использовать этот метод, вы должны следовать этому формату:

fieldName__contains

Например, если вы хотите, чтобы ваши пользователи выполняли поиск на основе поля модели с именем имя, вы должны изменить свой код, чтобы он выглядел следующим образом:

name__contains=search_query

Наконец, функция отображает шаблон и передает поисковый запрос и отфильтрованную модель в качестве контекста.

Однако, если метод формы не является ПОЧТА запрос функция отрисовывает шаблон с пустым словарем и не обрабатывает поисковый запрос.

Создайте шаблон для результатов поиска

  • Создайте файл HTML, чтобы вернуть результаты поиска на сторону клиента.
  • Вывести результат поиска на страницу для просмотра пользователем. Код в вашем HTML-файле должен выглядеть так:
{% если запрос %}
<див>
<див>
перебирать поисковый запрос
{% для сообщения в сообщениях %}
<див>
вернуть поисковый запрос
<п>{{Заголовок поста}}п>
див>
{% конец для %}
див>
див>
{% еще %}
вернуть сообщение, если пользователь не вводит поисковый запрос
<h1>Пожалуйста, введите поисковый запросh1>
{% конец%}

Приведенный выше HTML-шаблон проверяет, вводит ли пользователь поисковый запрос в строку поиска. Если пользователь вводит поисковый запрос, для цикла перебирает результаты поиска и возвращает их пользователю. Когда нет поискового запроса, отображается сообщение для пользователя, чтобы ввести поисковый запрос. Случай, когда поискового запроса может не быть, — это если ваш пользователь переходит непосредственно к URL-адресу, не заполняя строку поиска, т. е. ваш пользователь вводит URL-адрес, такой как мой сайт.com/поиск прямо в браузере. Вы должны убедиться, что используете Наследование шаблонов Django в вашем HTML-файле.

  • Измените свой HTML-код, чтобы возвращать сообщение об ошибке, если нет результатов поиска.
{% если запрос %}
<див>
<див>
проверить, есть ли результат в базе
{% если сообщения %}
перебирать поисковый запрос, если есть результат
{% для сообщения в сообщениях %}
<див>
вернуть поисковый запрос
<п>{{Заголовок поста}}п>
див>
{% конец для %}
вернуть сообщение, если результаты не найдены.
{% еще %}
<h3>Результаты поиска не найденыh3>
{% конец%}
див>
див>
{% еще %}
<h1>Пожалуйста, введите поисковый запросh1>
{% конец%}

Новый HTML-шаблон обеспечивает лучший пользовательский интерфейс. Он вводит условный оператор, чтобы проверить, доступен ли результат поиска в базе данных. Если есть, он отображает результат поиска; в противном случае он отправляет пользователю сообщение об ошибке.

Настройте свои шаблоны URL

  • Если вы этого не сделали, создайте urls.py файл в каталоге вашего приложения.
  • В вашей urls.py, создайте шаблон URL для вашей страницы поиска:
от django.urls Импортировать путь
от. Импортировать Просмотры

URL-шаблоны = [
путь('поиск/', views.search_feature, имя ='поиск-просмотр'),
]

Программа выше сначала импортирует путь функции и Просмотры файл, связанный с приложением. Затем он создает путь с именем вид поиска для страницы поиска.

  • Добавьте действие формы в панель поиска. URL-адрес действия должен указывать на путь URL-адреса, предназначенный для представления поиска. В этом случае форма указывает на вид поиска.
<формасорт="д-флекс"роль="поиск"метод="ПОЧТА"действие="{% url 'поиск-просмотр' %}">
<вход
class="form-control me-NN"
тип = "поиск"
placeholder="Искать что-то"
имя = "search_query"
требуется aria-label="Поиск"
>
<кнопкасорт="btn btn-контур-успех"тип="представлять на рассмотрение">Поисккнопка>
форма>

Без действия формы, указывающего на ваш URL-адрес поиска, ваша функция поиска не будет работать. Помните, что ваш URL-адрес поиска должен указывать на представление Django, которое обрабатывает логику вашей функции поиска.

Создайте функцию поиска для нескольких полей модели

Если вы хотите улучшить взаимодействие с пользователем в своем веб-приложении, вы можете разрешить пользователям выполнять поиск по нескольким полям в вашей модели. Например, в приложении для блога вы можете захотеть, чтобы пользователь выполнял поиск по заголовкам сообщений или именам авторов.

Для реализации этой возможности следует использовать Вопрос объект, предоставленный Django. Вам следует импортировать Вопрос объект в вашем просмотры.py такой файл:

от django.db.models Импортировать Вопрос

После импорта Вопрос, вы должны изменить свою функцию просмотра следующим образом:

дефsearch_post(запрос):
если запрос.метод == 'ПОЧТА':
поиск_запрос = запрос. ПОЧТА['поисковый запрос']
сообщения = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
возвращаться оказывать (запрос, 'имя_приложения/template_name.html', {'запрос':поисковый запрос, 'сообщения':посты})
еще:
возвращаться оказывать (запрос, 'имя_приложения/template_name.html',{})

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

Улучшение взаимодействия с пользователем с помощью функции поиска

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