До добавления фильтра, пагинация отрабатывала без проблем. Добавил фильтр на основе django-filters, и теперь только первая страница отдает верный контекст, начиная со второй страницы - отображается полный список экземпляров. При переходе на любую страницу пагинации, вывод самой пагинации пропадает. Это поведение соответствует отображения объектов при отработке фильтра. Т.к. изначально я не ставил задачу добавлять пагинацию к результатам фильтра, а применять ее только к полному нефильтрованному списку.
Я думаю, что проблема в reques.GET, содержащемся в шаблоне для получения фильтрованных значений. Получается, что и фильтр и пагинация используют метод GET, при переходе на вторую страницу пагинации срабатывает условие if request.GET для фильтра, а так как фильтр не содержит ограничений отдается полный список элементов со всех страниц. Возможно я ошибаюсь и причина в другом. Помогите разобраться, как подружить пагинацию и фильтрацию.
{% block content %}
<!-- Page Content -->
<div class="container">
<!-- Filter -->
<header class="custom-top">
<form method="get"> ### filters form
<div class="well">
<div class="row">
<div class="form-group col-sm-4 col-md-3 ">
<b>{{ filter.form.direction.label_tag }}</b>
<div class="clear"></div>
{% render_field filter.form.direction class="custom-multiple-select" %}
</div>
<div class="form-group col-sm-4 col-md-3">
<b>{{ filter.form.group.label_tag }}</b>
<div class="clear"></div>
{% render_field filter.form.group class='custom-select' %}
</div>
</div>
<div class="row">
<div class="form-group col-sm-4 col-md-3">
<input type="submit" value="Apply" class="btn btn-success filter-button">
<a href='{% url 'trainers:viewtrainers' trainer_city %}' class="btn btn-secondary filter-button float-lg-right">Clear</a>
</div>
</div>
</div>
</form>
</header>
{% if request.GET %} ### if filters apply
<div class="row text-center">
{% for trainer in filter.qs %}
{% if trainer.is_active %}
<div class="col-lg-3 col-md-6 mb-4">
<div class="card h-100">
{% if trainer.img %}
<div class="cardimg">
<img class="card-img-top" src="{{ MEDIA_URL }}{{ trainer.img.url }}">
</div>
{% else %}
<img class="card-img-top" src="http://placehold.it/700x400">
{% endif %}
<div class="card-body ">
<h4 class="card-title">
<a href="{% url 'trainers:viewperson' trainer.slug %}">{{ trainer.name }}</a>
</h4>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
<!-- Page Features -->
{% else %} ### if filter is not used
{% if trainers %}
<div class="row text-center">
{% for trainer in trainers %}
{% if trainer.is_active %}
<div class="col-lg-3 col-md-6 mb-4">
<div class="card h-100">
{% if trainer.img %}
<div class="cardimg">
<img class="card-img-top" src="{{ MEDIA_URL }}{{ trainer.img.url }}">
</div>
{% else %}
<img class="card-img-top" src="http://placehold.it/700x400">
{% endif %}
<div class="card-body ">
<h4 class="card-title">
<a href="{% url 'trainers:viewperson' trainer.slug %}">{{ trainer.name }}</a>
</h4>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
<!-- Pagination--> ### Paginations
{% if trainers.has_other_pages %}
<ul class="pagination justify-content-center" style="margin:20px 0">
{% if trainers.has_previous %}
<li class="page-item"><a class="page-link" href="?page={{ trainers.previous_page_number }}">«</a></li>
{% else %}
<li class="page-item disabled"><span class="page-link" >«</span></li>
{% endif %}
{% for i in trainers.paginator.page_range %}
{% if trainers.number == i %}
<li class="page-item active"><span class="page-link">{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if trainers.has_next %}
<li class="page-item"><a class="page-link" href="?page={{ trainers.next_page_number }}">»</a></li>
{% else %}
<li class="page-item disabled"><span class="page-link" >»</span></li>
{% endif %}
</ul>
{% endif %}
{% endif %}
</div>
<!-- /.container -->
{% endblock content %}