"Видеоурок"
В этом уроке мы собираемся заставить панель поиска пользователя, которая была в нашей панели навигации, работать. Мы будем использовать объект Q, который поставляется с Django, чтобы заставить это работать. Сначала нам нужно будет внести некоторые изменения в нашу панель навигации.
Обновление панели навигации
Нам нужно добавить метод и действие в форму, этот URL-адрес действия еще не создан, но мы назовем шаблон URL-адреса так же, как это, когда мы создадим его позже. Нам также нужно добавить кнопку отправки, для этого мы будем использовать значок шрифта awesome. Нам также нужно добавить имя и значение в поле ввода. Мы будем использовать имя для получения значения позже в нашем представлении, значение сохранит все, что мы ввели, заполненным в поле ввода.
лендинг/шаблоны/лендинг/navbar.html:
<form class="d-flex" method="GET" action="{% url 'profile-search' %}">
<div class="input-group">
<span class="input-group-text" id="basic-addon1">@</span>
<input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1" name='query' value="{{ request.GET.query }}">
<button style="border: none; background-color: transparent; box-shadow: none" type="submit"><i class="fas fa-search"></i></button>
</div>
</form>
Добавление представления поиска и URL-адреса
Теперь, когда у нас настроен шаблон для перехода к URL-адресу поиска, давайте создадим представление, а затем добавим путь к URL-адресу. Первое, что нам нужно сделать, это использовать общий класс View и добавить метод get, так как это тип запроса, который отправляет наша форма. Далее нам нужно получить значение из атрибута имени в нашей форме, мы можем сделать это с помощью self.request.GET.get(‘query’). После этого мы можем использовать объект Q для фильтрации по имени пользователя в профилях. Наконец, мы отобразим шаблон с profile_list в контексте.
социальные/представления.py:
class UserSearch(View): def get(self, request, *args, **kwargs): query = self.request.GET.get('query') profile_list = UserProfile.objects.filter( Q(user__username__icontains=query) )
context = { 'profile_list': profile_list }
return render(request, 'social/search.html', context)
социальные/urls.py:
path('search/', UserSearch.as_view(), name='profile-search'),
Добавление шаблона поиска
Последним шагом для того, чтобы все заработало, является создание шаблона search.html. Это будет довольно просто, мы просто пройдемся по профилям, с которыми он совпал, и перечислим имя пользователя, местоположение и количество подписчиков, которые у них есть.
социальные/шаблоны/социальные/search.html:
{% extends 'landing/base.html' %}
{% block content %} <div class="container"> {% for profile in profile_list %} <div class="row justify-content-center mt-3"> <div class="col-md-5 col-sm-12 border-bottom position-relative"> <div class="position-relative"> <p><a style="text-decoration: none;" class="text-primary" href="{% url 'profile' profile.pk %}">@{{ profile.user }}</a></p> {% if profile.location %} <p>{{ profile.location }}</p> {% endif %} <p>Followers: {{ profile.followers.all.count }}</p> </div> </div> </div> {% endfor %} </div> {% endblock content %}