五.2 --分页之展示指定个数页码

.上述效果中,在每个页面底部都是一次就把所有页码都展示出来,这样是不合理的,太长了,应该让它少点。这里我设为最多显示11个。

.那每页展示的页码数字应该从多少到多少,且起始页码到终止页码总共11个:

1.我这里是根据当前的页码数字前边走5个后边走5个就行--所以得设置一个一半的计数变量,即11除2就是5。那起始的页码就是当前页码减5,而终止的页码就是当前页码加5。

views.py:

users = [{'name':'zhihua{}'.format(i),'pwd':'zh12345{}'.format(i)} for i in range(1,302)]
def user_list(request):
try: #为防止别人在地址栏?page=后乱输数字或别的字符,所以做判断并都默认跳到第一页
current_page = int(request.GET.get('page',1)) #当前的页码,默认拿到的是1
if current_page <= 0:
current_page = 1
except Exception as e: #报错则显示第一页
current_page =1
#一次最多显示的页码数
max_show = 11
half_show = max_show // 2 #一半的计数

per_num = 10 # 每页显示的数据条数
all_count = len(users)# 总数据量
total_num, more = divmod(all_count, per_num)# 总页码数
if more:#如果有余数就让总页码数加等1
total_num += 1
page_start = current_page - half_show #起始页码
page_end = current_page + half_show #终止页码

#切片的起始值
start = (current_page - 1)* per_num
#切片的终止值
end = current_page * per_num

return render(request, 'user_list.html',
{
"data": users[start:end],
'total_num': range(page_start, page_end + 1)

})

效果如下:它根据14往左减5个往右减5个了,

但如图中,当前页码数小时它就为0和负数,这样是不对的,应该给它限制

 且,若我数据没有300多条,如只有80条,那每页面显示10条最大页码数就为8即只有8个页码了,那上面的效果中起始页码加终止页码总共得11个,这就有问题了。

扫描二维码关注公众号,回复: 8198768 查看本文章

2.若总数据量不足已用11个页面(11个页码)显示:---做判断

.(1)总页码数(页面数)小于最大页码显示数11:最多显示页码数为总页码数字----如页面数只有8个

.(2)总页码数(页面数)大于最大页码显示数11:则最多显示11个页码:------如页面数有20个

  #当前页面页码数字小于5则展示1到11个页码:则起始为1终止为11----如当前是第3页

  #当前页码加5大于总页面数(总页码):则终止为总页面数,起始为总页面数减11加1---如当前是第16页

 .(3)否则就是往前加5往后减5

views.py中:

users = [{'name':'zhihua{}'.format(i),'pwd':'zh12345{}'.format(i)} for i in range(1,300)]
def user_list(request):
try: #为防止别人在地址栏?page=后乱输数字或别的字符,所以做判断并都默认跳到第一页
current_page = int(request.GET.get('page',1)) #当前的页码,默认拿到的是1
if current_page <= 0:
current_page = 1
except Exception as e: #报错则显示第一页
current_page =1
#一次最多显示的页码数
max_show = 11
half_show = max_show // 2 #一半的计数

per_num = 10 # 每页显示的数据条数
all_count = len(users)# 总数据量
total_num, more = divmod(all_count, per_num)# 总页码数
if more:#如果有余数就让总页码数加等1
total_num += 1

#总页码数(页面数)小于最大页码显示数11:最多显示页码数为总页码数字
if total_num <= max_show:
page_start = 1
page_end = total_num
else:
# 总页码数(页面数)大于最大页码显示数11:最多显示11个页码
if current_page <= half_show: #当前页面页码数字小于5则展示1到11个页码
page_start = 1
page_end = max_show
elif current_page + half_show >= total_num:#当前页码加5大于总页面数(总页码)
page_end = total_num #总页面数(总页码)
page_start = total_num - max_show + 1 #起始页码是总页码减11加1
else:
page_start = current_page - half_show
page_end = current_page + half_show

#切片的起始值
start = (current_page - 1)* per_num
#切片的终止值
end = current_page * per_num

return render(request, 'user_list.html',
{
"data": users[start:end],
'total_num': range(page_start, page_end + 1)

})

效果如下:

猜你喜欢

转载自www.cnblogs.com/dbslinux/p/12045339.html