classPagination(object):def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):"""封装分页相关数据
:param current_page: 当前页
:param all_count: 数据库中的数据总条数
:param per_page_num: 每页显示的数据条数
:param pager_count: 最多显示的页码个数
用法:
queryset = model.objects.all()
page_obj = Pagination(current_page,all_count)
page_data = queryset[page_obj.start:page_obj.end]
获取数据用page_data而不再使用原始的queryset
获取前端分页样式用page_obj.page_html"""
try:
current_page=int(current_page)exceptException as e:
current_page= 1
if current_page < 1:
current_page= 1self.current_page=current_page
self.all_count=all_count
self.per_page_num=per_page_num#总页码
all_pager, tmp =divmod(all_count, per_page_num)iftmp:
all_pager+= 1self.all_pager=all_pager
self.pager_count=pager_count
self.pager_count_half= int((pager_count - 1) / 2)
@propertydefstart(self):return (self.current_page - 1) *self.per_page_num
@propertydefend(self):return self.current_page *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 <=self.pager_count_half:
pager_start= 1pager_end= self.pager_count + 1
#当前页大于5
else:#页码翻到最后
if (self.current_page + self.pager_count_half) >self.all_pager:
pager_end= self.all_pager + 1pager_start= self.all_pager - self.pager_count + 1
else:
pager_start= self.current_page -self.pager_count_half
pager_end= self.current_page + self.pager_count_half + 1page_html_list=[]#添加前面的nav和ul标签
page_html_list.append('''
- ''')
first_page= '
首页' % (1)page_html_list.append(first_page)if self.current_page <= 1:
prev_page= '
上一页'else:
prev_page= '
上一页' % (self.current_page - 1,)page_html_list.append(prev_page)for i inrange(pager_start, pager_end):if i ==self.current_page:
temp= '
%s' %(i, i,)else:temp= '
%s' %(i, i,)page_html_list.append(temp)if self.current_page >=self.all_pager:
next_page= '
下一页'else:
next_page= '
下一页' % (self.current_page + 1,)page_html_list.append(next_page)
last_page= '
尾页' %(self.all_pager,)page_html_list.append(last_page)#尾部添加标签
page_html_list.append('''
''')return ''.join(page_html_list)