def __init__(self, current_page_num, all_count, request,per_page_num=2, pager_count=11):"""封装分页相关数据
:param current_page_num: 当前访问页的数字
:param all_count: 分页数据中的数据总条数
:param per_page_num: 每页显示的数据条数
:param pager_count: 最多显示的页码个数"""
'''进行判断,如果输入的是字符串捕获之后整回第一页'''
try:
current_page_num=int(current_page_num)exceptException as e:
current_page_num=1
"""如果输入的是别的字符或者<1,直接给他第一页数据"""
if current_page_num <1:
current_page_num=1
#进行数据的实例化
self.current_page_num =current_page_num
self.all_count=all_count
self.per_page_num=per_page_num#计算实际的总页码 商和余 (pmod是内置函数)
all_pager,tmp =pmod(all_count,per_page_num)iftmp:
all_count= all_count+1self.all_pager=all_pager
self.pager_count=pager_count
#选择当前页数显示左边显示5个右边显示5个36*
self.pager_count_half= int((pager_count - 1)/2)#保存搜索条件,deepcopy深拷贝,可以添加节点
importcopy
self.params=copy.deepcopy(request.GET)'''起始页和结束也的判断
如果用户在4页,显示的数据应该是30---40 也就是:current_page_num - 1 * per_page_num'''@propertydefstart(self):return (self.current_page_num - 1) *self.per_page_num
@propertydefend(self):return self.current_page_num *self.per_page_numdefpage_html(self):#如果总页码 < 11个:
if self.all_pager <=self.pager_count:#默认显示就是第一页
pager_start = 1pager_end= self.all_pager + 1
#总页码 > 11
else:#当前页如果<=页面上最多显示11/2个页码
if self.current_page_num <=self.pager_count_half:
pager_start= 1pager_end= self.pager_count + 1
#当前页大于5
else:#页码翻到最后
if (self.current_page_num + self.pager_count_half) >self.all_pager:
pager_start= self.all_pager - self.pager_count + 1pager_end= self.all_pager + 1
else:
pager_start= self.current_page_num -self.pager_count_half
pager_end= self.current_page_num + self.pager_count_half + 1page_html_list=[]
first_page= '
首页' % (1,)
page_html_list.append(first_page)#判断是否有上一页 当前页面是1 那就是等于了,等于就设置 class="disabled" 不让选中
#否则的话就是正常显示 给参数 下一页就是当前页数 - 1
if self.current_page_num <= 1:
prev_page= '
上一页'
else:
prev_page= '
上一页' % (self.current_page_num - 1,)
page_html_list.append(prev_page)for i inrange(pager_start, pager_end):
self.params["page"] =i#如果等钱页面等于选中的页面 + class="active" 显示颜色,否则的话就是正常显示
if i ==self.current_page_num:
temp= '
%s' %(self.params.urlencode(), i)else:
temp= '
%s' %(self.params.urlencode(), i,)
page_html_list.append(temp)#判断是否有下一页 当前页面是8 总页数也是8 那就是等于了,等于就设置 class="disabled" 不让选中
#否则的话就是正常显示 给参数 下一页就是当前页数 + 1
if self.current_page_num >=self.all_pager:
next_page= '
下一页'
else:
next_page= '
下一页' % (self.current_page_num + 1,)
page_html_list.append(next_page)
last_page= '
尾页' %(self.all_pager,)
page_html_list.append(last_page)return ''.join(page_html_list)