1

我正在使用 Django 分页。有两种情况

  1. 当用户登陆此页面时,结果集会返回预先过滤的结果,因此我不一定需要对结果进行分页。
  2. 当用户关闭过滤器时,我需要显示所有结果(这是我需要分页时,10000 条记录)这些记录以不同列表的形式查看,我将结果以压缩格式发送。

我无法通过超过 1 个列表/结果集进行分页。

4

1 回答 1

1

您所需要的只是提供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 %}
于 2018-05-07T18:34:52.773 回答