关于Django网站数据分页的处理
1,预期效果
2,Paginator介绍
使用了Django框架中django/core/paginator.py下的Paginator类,实现简单的分页。
Paginator对象
Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数
属性
count:对象总数
num_pages:页面总数
page_range:页码列表,从1开始,例如[1, 2, 3, 4]
方法
page(num):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常
异常exception
InvalidPage:当向page()传入一个无效的页码时抛出
PageNotAnInteger:当向page()传入一个不是整数的值时抛出
EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出
Page对象
创建对象
Paginator对象的page()方法返回Page对象,不需要手动构造
属性
object_list:当前页上所有对象的列表
number:当前页的序号,从1开始
paginator:当前page对象相关的Paginator对象
方法
has_next():如果有下一页返回True
has_previous():如果有上一页返回True
has_other_pages():如果有上一页或下一页返回True
next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
len():返回当前页面对象的个数
迭代页面对象:访问当前页面中的每个对象
3,简单用法
从数据库取出数据,使用Paginator类进行处理,设置每页的个数,然后调用page()方法,即生成一页的Page对象,继而调用Page的方法跟属性即可。用我做的例子看下。
4,样例
#views.py
这是一个专门处理分页的函数。
def paging(current_page_index,current_page,list_of_page,count_of_page):
"""
实现分页功能:
传入参数:
current_page_index:当前页ID
list_of_page:一个包含所有页码的列表
count_of_page:页码的数量
:return:
"""
left_ellipsis=False
right_ellipsis=False
left_page_index=[]
right_page_index=[]
first_page_show = False
last_page_show = False
if current_page_index == 1: # 请求第一页
right_page_index = list_of_page[0:current_page_index+4]
if right_page_index[-1] < count_of_page-1: # 与最后一页之间有其他页,需要省略号
right_ellipsis = True
if right_page_index[-1] &