Это имеет смысл, поскольку разбиение на страницы выполняется по результату get_queryset
с помощью метода .paginate_queryset(..)
[Django -doc] , который возвращает 4-кортеж : (paginator, page, object_list, is_paginated)
.
from django.http import QueryDict
class PostListView(ListView):
# …
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
queryset = self.get_queryset()
MyFilter = PubFilters(self.request.GET, queryset=queryset)
paginator, page, object_list, is_paginated = self.<b>paginate_queryset(</b>
queryset,
self.get_paginated_by(queryset)
<b>)</b>
queries = self.request.GET.copy()
<b>queries.pop('page', None)</b>
context.update(
filter=MyFilter,
filtered_items=object_list,
page=page,
is_paginated=is_paginated,
count=paginator.count,
<b>queries=queries</b>
)
context['búsqueda'] = self.request.GET.get('q')
return context
Обратите внимание, что в ссылках на другие страницы, если вы хотите сохранить фильтрацию, вам нужно будет добавить часть строки запроса в параметры запроса, что-то вроде:
<a href="?page=2<b>&{{ queries.urlencode|safe }}</b>">