无涯教程-Django - 分页(Pagination)

73 阅读1分钟

django pagination

Pagination 分页使无涯教程可以在多个页面上分发可迭代的内容。 然后,可以使用上一页下一页按钮的页码导航到这些页面。

分页器类和页面对象

Django提供了一个 Paginator 类,该类具有以下属性:

  • page(page_number)            -  返回具有给定page_number的page_object
  • has_previous                          -   是否有上一页,返回True/False
  • has_next                                   -   是否有下一页,返回true/False
  • previous_page_number     -  返回上一页码
  • next_page_number              -   返回下一页号
  • number                                      -  返回当前页码
  • paginator.num_pages         -  返回总页码

首先,导入 Paginator 类。

from django.core.paginator import Paginator

现在,选择每页的对象数。

p = Paginator(queryset, number_of_objects_per_page)

然后,使用 page()函数制作页面对象。

page_object = p.page(page_number)

为了从URL请求获取页码,请使用:

page_object = p.page(request.GET.get(page))

最后,返回 page_object 作为上下文变量。 views.py下的组合代码如下所示:

    from django.core.paginator import Paginator
    def my_view_function(request):
        queryset = [A, B, C, D, E]        # sample data
        p = Paginator(queryset, 1)                  # for 1 object per page
        try:
            page_number = request.GET.get(page)
            page_object = p.page(page_number)
        except:
            page_object = p.page(1)                 # load first page by default
        return render(request, my_template.html, {page_object:page_object})
                                

在模板中添加分页

要从 Paginator page_object 应用页面效果,请参考以下代码:

        {% for i in page_pbject %}
            {{i}}
        {% endfor %}}
    </span><span class="pun">{%</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> page_object</span><span class="pun">.</span><span class="pln">has_previous </span><span class="pun">%}</span><span class="pln">
        href</span><span class="pun">=</span><span class="str">"?page={{ page_object.previous_page_number }}"</span><span class="pln">
    </span><span class="pun">{%</span><span class="pln"> endif </span><span class="pun">%}</span><span class="pln">
    </span><span class="typ">Page</span><span class="pln"> </span><span class="pun">{{</span><span class="pln"> page_object</span><span class="pun">.</span><span class="pln">number </span><span class="pun">}}</span><span class="pln"> </span><span class="kwd">of</span><span class="pln"> </span><span class="pun">{{</span><span class="pln"> page_object</span><span class="pun">.</span><span class="pln">paginator</span><span class="pun">.</span><span class="pln">num_pages </span><span class="pun">}}</span><span class="pln">
    </span><span class="pun">{%</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> page_object</span><span class="pun">.</span><span class="pln">has_next </span><span class="pun">%}</span><span class="pln">
        href</span><span class="pun">=</span><span class="str">"?page={{ page_object.next_page_number }}"</span><span class="pln">
    </span><span class="pun">{%</span><span class="pln"> endif </span><span class="pun">%}</span><span class="pln">
                            </span></pre>

参考链接

www.learnfk.com/django/djan…