Django. Постраничный вывод данных из стороннего источника

Есть заготовка вьюхи и шаблона, которые обрабатывают поисковый запрос в LDAP и выводят результаты поиска пользователей. Данные запрашиваются напрямую из AD и так как они весьма динамичны, хранить их в БД django не имеет смысла.

Данная заготовка работает и прекрасно выводит первые 25 записей из списка users_list, однако очевидно, что при попытке перейти на вторую страницу списка произойдет пезапуск вьюхи, список обнулится и будет выведена только форма поиска.

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

view.py

def users_list(request):
  
    users_list_form = forms.UserListForm()
    context = {"title"            : "Search Users",
               "users_list_form"  : users_list_form}

    if request.method == "POST":

        users_list_form = forms.WebExUserListForm(request.POST)
        if users_list_form.is_valid():
            # Запрос данных в AD
            users_list = user_search(users_list_form.cleaned_data["search_object"])
            if users_list:
            
                paginator = Paginator(users_list, 25)
                page_number = request.GET.get("page")
                page_obj = paginator.get_page(page_number)

                context.update({"page_obj": page_obj})

                messages.success(request, "Found {} Record(s)!".format(len(users_list)))
            else:
                messages.warning(request, "Users Not Found!")

    return render(request, "app_ldap/users_ldap.html", context)

users_ldap.html

{% extends 'app_base/base_home.html' %}
{% load static %}
{% block content %}
    <div>
        <form method="post">
            {% csrf_token %}
            <div>
                {{users_list_form}}
                <button class="btn btn-info" type="submit"><i class="icon-search icon-white"></i> Search</button>
            </div>
        </form>
    </div>
    {% if page_obj %}
        <div>
            <table>
                <tbody>
                    {% for user in page_obj %}
                        <tr class="row1">
                            <td width="100" style="text-align: center; vertical-align: middle;">
                                <img src="data:image/png;base64,{{user.thumbnailPhoto}}" alt="None">
                            </td>
                            <td>
                                <div>
                                    <h4><strong>{{ user.displayName }}</strong></h4>
                                    <h5>{{ user.ipPhone }} | {{ user.mail }}</h5>
                                </div>
                            </td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
            <!-- Phone Pagination Block -->
            {% if page_obj.has_previous %}
                <a class="btn btn-outline-info" href="?page=1">First</a>
                <a class="btn btn-outline-info" href="?page={{ page_obj.previous_page_number }}">Previous</a>
            {% endif %}
            {% for num in page_obj.paginator.page_range %}
                {% if page_obj.number == num %}
                    <a class="btn btn-info" href="?page={{ num }}">{{ num }}</a>
                {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
                    <a class="btn btn-outline-info" href="?page={{ num }}">{{ num }}</a>
                {% endif %}
            {% endfor %}
            {% if page_obj.has_next %}
                <a class="btn btn-outline-info" href="?page={{ page_obj.next_page_number }}">Next</a>
                <a class="btn btn-outline-info" href="?page={{ page_obj.paginator.num_pages }}">Last</a>
            {% endif %}
        </div>
    {% endif %}
{% endblock content %}

Ответы (0 шт):