import math
#每页有pn_num个对象 每个页面显示index_number个页索引 当前pn页 obj要查询的模型类
def pages(pn_num,index_number, pn,obj):
# 最大页数sum_page 最小页数1页 每页有pn_num个对象 目前是pn页
pn = int(pn)
goods_number = obj.objects.all().count()
sum_page = math.ceil(goods_number / pn_num)
if not sum_page:
sum_page = 1
# 每页要显示的对象集合pn_obj
start_obj = (pn - 1) * pn_num
end_obj = pn * pn_num
pn_obj = obj.objects.all()[start_obj:end_obj]
# 要显示的页码范围p_range 每个页面显示index_number个页索引
p_range = range(1, sum_page + 1)
if pn < math.ceil(index_number / 2):
p_range = p_range[:index_number]
elif pn > sum_page - math.floor(index_number / 2):
p_range = p_range[-index_number:]
else:
p_range = p_range[pn - 1 - math.floor(index_number / 2): pn + math.floor(index_number / 2)]
p_next=pn+1
if p_next>sum_page:
p_next=sum_page
p_pre=pn-1
if p_pre<1:
p_pre=1
data={
'pn':pn, #当前页码
'max_page':sum_page, #最大页码
'pn_num':pn_num, #每页要显示的数据个数
'pn_obj':pn_obj, #每页要显示的数据对象集合
'p_range':p_range, #当前页面的索引范围如[5,6,7,8]
'p_index':index_number, #显示几个索引页
'p_next':p_next, #下一页的页码
'p_pre':p_pre, #上一页的页码
}
return data
关于python在Django中分页的实现
最新推荐文章于 2022-10-08 17:34:38 发布