django中的分页标签

时间:2022-04-01 14:41:41
class Pagination:
def __init__(self, page, page_total, per_one_page=15, max_page=11): '''
:param page: 当前页
:param page_total: 总页数
:param per_one_page: 没有显示的条数
:param page_max: 最大分页标签数
'''
# 获取当前页面
try:
page = int(page)
if page < 0:
page = 1
except Exception as e:
print(e)
page = 1
self.page = page
# 没有显示的内容条数
self.per_one_page = per_one_page
# 最大分页标签数
self.max_page = max_page
# 最大分页标签的一半
self.half_page = self.max_page // 2
page_total, more = divmod(page_total, per_one_page)
self.page_total = page_total
# 总页数
if more:
self.page_total += 1
# 当前分页标签起始和结束值
# 页面总数小于最大显示数
if page_total < self.max_page:
self.page_start = 1
self.page_end = self.page_total
else:
# 当前页面小于分页最大显示数量的一半,
if self.page - self.half_page < 0:
self.page_start = 1
self.page_end = self.max_page
# 当前页面大于总页面数量减去最大分页数量的一半
elif page + self.half_page > page_total:
self.page_end = page_total
self.page_start = page_total - max_page
else:
# 正常取值
self.page_start = page - self.half_page
self.page_end = page + self.half_page # 取对象开始索引
@property
def start(self):
return (self.page - 1) * self.per_one_page # 取对象结束索引
@property
def end(self):
return self.page * self.per_one_page # 获取分页标签
@property
def page_tag(self):
# 页面分页标签列表
pager_li = []
# 上一页标签按钮
if self.page > 1:
last_page = '<li><a href="?page={}"><span>«</span></a></li>'.format(self.page - 1)
else:
# 当前页是第一页
last_page = '<li class="disabled"><a ><span>«</span></a></li>'
pager_li.append(last_page)
# 循环生成分页标签
for i in range(self.page_start, self.page_end + 1):
if i == self.page:
pager_li.append('<li class="active"><a href="?page={}">{}</a></li>'.format(i, i))
else:
pager_li.append('<li><a href="?page={}">{}</a></li>'.format(i, i))
# 下一页标签按钮
if self.page + 1 < self.page_total:
next_page = '<li><a href="?page={}"> <span>»</span></a></li>'.format(self.page + 1)
else:
# 当前页是最后一页
next_page = '<li class="disabled"><a ><span>»</span></a></li>'
# 所有标签联合
pager_li.append(next_page)
pager = ' '.join(pager_li)
return pager