Django分页显示

Django自身提供了一些类来实现管理分页,数据被分在不同的页面中,并带有“上一页/下一页”标签。这个类叫做Pagination,其定义位于 django/core/paginator.py 中。

实例:简单分页

  1. views
def index(request):
    users = User.objects.all()
    pindex = request.GET.get("pindex")
    #分页
    pageinator = Paginator(users, 2)
    if pindex=="" or pindex==None:
         pindex = 1
    page = pageinator.page(pindex)
    return render(request,'page_demo/index.html',{'page':page})
  1. templates
遍历:
{% for emp in page.object_list %}
{% endfor %}

分页:
{% if page.has_previous %}
    <上一页
{% endif %}
{% for pindex in page.paginator.page_range %}
    {% if pindex == page.number %}
        {{ pindex }}
    {% else %}
        {{ pindex }}
    {% endif %}
{% endfor %}
{% if page.has_next %}
    >下一页
{% endif %}
  1. 配置urls映射,完成分页

知识点:

  1. pagtor = Paginator(User.objects.all(),per_page=3) # 构造分页器对象
  2. Paginator.count:所有页面对象总数,即统计object_list中item数目。
  3. Pagnator.num_pages:页面总数。
  4. pagiator.page_range:页面范围,从1开始,例如[1,2,3,4]
  5. page = Paginator(User.objects.all(),per_page=3).page(1) # 获取第一页
  6. Page.has_next () 如果有下一页,则返回 True
  7. Page.has_previous () 如果有上一页,返回 True
  8. Page.has_other_pages () 如果有上一页或下一页,返回 True
  9. Page.next_page_number () 返回下一页的页码。如果下一页不存在,抛出 InvlidPage 异常
  10. Page.previous_page_number () 返回上一页的页码。如果上一页不存在,抛出InvalidPage异常
  11. Page.start_index () 返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将
    五个对象的列表分为每页两个对象,第二页的 start_index() 会返回 3
  12. Page.end_index () 返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,
    将五个对象的列表分为每页两个对象,第二页的 end_index() 会返回 4
  13. Page.object_list 当前页上所有对象的列表
  14. Page.number 当前页的序号,从1开始
  15. Page.paginator 相关的 Paginator 对象

你可能感兴趣的:(Django分页显示)