Django нумерация страниц с несколькими списками - PullRequest
0 голосов
/ 07 мая 2018

Я использую пагинацию Django. Есть 2 сценария

  1. Когда пользователь попадает на эту страницу, набор результатов возвращает предварительно отфильтрованные результаты, поэтому мне не обязательно разбивать результаты на страницы.
  2. Когда пользователь отключает фильтры, мне нужно показать все результаты (это когда мне нужно разбить на страницы, 10000 с записей). Эти записи отображаются в виде различных списков. И я отправляю результат в формате ZIP.

Я не могу разбить на страницы более чем 1 список / набор результатов.

1 Ответ

0 голосов
/ 07 мая 2018

Все, что вам нужно, это дать Paginator список объектов
Количество элементов, которые вы хотели бы иметь на каждой странице, и это дает вам способы доступа к элементам для каждой страницы: Django Doc

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage

# 1st OPTION: in case you have multiple queryset 
from itertools import chain
queryset1 = Queryset.objects.all()
queryset2 = Queryset.objects.all()
YourObjectList = sorted(chain(queryset1,queryset2),reversed=True)
# 2nd Option: with Django union queryset
YourObjectList = queryset1.union(queryset2)

object_list = YourObjectList # Queryset of List of Objects
number_items = 10  # The number of items you’d like to have on each page

page = request.GET.get("page",1)
# Get the page parameter i.e localhost:8080?page=1
paginator = Paginator(object_list,number_items)
try:
    object_list = paginator.page(page)
except PageNotAnInteger:
    object_list = paginator.page(1)
except EmptyPage:
    object_list = paginator.page(paginator.num_pages)

# add the [object_list] to context for [template]

в шаблоне, вы можете просмотреть его, чтобы отобразить все объекты

{% for obj in object_list %}
    {{obj}}<br>
{% endfor %}

БОНУС : Как вы можете отобразить Paginator почти как этот

{% if object_list.has_other_pages %}
    <div class="pagination">
        {% if object_list.has_previous %}
                <a href="?&page={{object_list.previous_page_number}}">Previous</a> -
        {% endif %}
                Page {{object_list.number}} / {{object_list.paginator.num_pages}}

        {% if object_list.has_next %}
                - <a href="?page={{object_list.next_page_number}}">Next</a>
        {% endif %}
    </div>
{% endif %}
...