django 分页

来源:互联网 发布:淘宝买的衣服没有吊牌 编辑:程序博客网 时间:2024/05/20 00:11


数据多了在一页全部显示不仅不美观,也给服务器带来很大压力。django提供了分页的工具,那就是paginator类,下面来看看该怎么用:

首先要导入该类:

from django.core.paginator import Paginator

认识Paginator类

class Paginator(object_list, per_page,orphans=0,allow_empty_first_page = True)

必需参数:

其中object_list可以是列表,元组,Django 查询集,或者其他有count()和__len__()方法的可切分对象

per_page指每页显示的最大数量

可选参数

orphans最后一页允许显示的最小数量,默认值为0,主要作用是防止最后一页显示的数量太少,

若数量小于orphans规定的值,则在前一页显示。

allow_empty_first_page是否允许第一页是空的

方法:

Paginator.page(number) 返回指定页的对象

属性:

Paginator.count 所有对象的数量

Paginator.num_pages 分页后的总页数

Paginator.page_range 从1开始的页码的区间如[1,2,3,4]

 

通过Paginator.page(number)可以获取Page对象

Page对象一般不手动生成

方法

Page.has_next() 返回True如果还有下一页

Page.has_previous() 返回True如果还有上一页

Page.has_other_pages()返回True如果还有上一页或下一页

Page.next_page_number()返回下一页的页码,有风险,即使不存在也会返回

Page.previous_page_number()返回前一页的页码,有风险,即使不存在也会返回

Page.start_index()返回当前页的第一个对象

Page.end_index()返回当前页的最后一个对象

属性

Page.object_list 一页中包含的项目的列表

Page.number 一页中包含的项目数量

Page.paginator 对应的Paginator对象

 

基础知识学完了以后来看个例子:

在视图中使用Paginator

from django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerdef listing(request):    contact_list = Contacts.objects.all()    p = Paginator(contact_list , 25)    page = request.GET.get('page')    try:        contacts = paginator.page(page)    except PageNotAnInteger:        # 如果页码不是整数,返回第一页.        contacts = paginator.page(1)    except EmptyPage:        # 如果页码不在范围内,返回最后一页        contacts = paginator.page(paginator.num_pages)    return render_to_response('list.html', {"contacts": contacts}) 再看看与此对应的模版该怎么写:{% for contact in contacts %}    {# Each "contact" is a Contact model object. #}    {{ contact.full_name|upper }}<br />    ...{% endfor %}<div class="pagination">    <span class="step-links">        {% if contacts.has_previous %}            <a href="?page={{ contacts.previous_page_number }}">previous</a>        {% endif %}        <span class="current">            Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.        </span>        {% if contacts.has_next %}            <a href="?page={{ contacts.next_page_number }}">next</a>        {% endif %}    </span></div>


原创粉丝点击