def practice_page(request):
users = [{'username': 'leon{}'.format(i),
'password': 'pwd{}'.format(i)} for i in range(0, 301)]
try:
request_page_num = int(request.GET.get('page', 1)) # 获取请求页
if request_page_num <= 0:
request_page_num = 1
except Exception as e:
print('{}:分页请求参数非法!'.format(str(e)))
request_page_num = 1
request_page_num = int(request_page_num) # 转化为 int 类型
all_data_length = len(users) # 总数据量
each_page_show_number = 10 # 每页显示 10 条数据吧
all_count_pages_number, more_page = divmod(all_data_length, each_page_show_number)
if more_page: # 如果有余数的话
all_count_pages_number += 1
max_show_page = 11 # 定义最大显示的数量数 11 页
half_page = max_show_page // 2 # 获取中间页码
if all_count_pages_number <= max_show_page: # 如果我的总的页数加起来还不满 11 格
start_page = 1 # 起始页写死为 1
end_page = all_count_pages_number # 最后一页同样写死
else:
if request_page_num - half_page <= 0: # start开始出现 0 了
start_page = 1 # 卡死第一页是 1
end_page = max_show_page # 最后一页是 最大允许显示的页数
elif request_page_num + half_page >= all_count_pages_number: # 如果已经最大了
start_page = all_count_pages_number - max_show_page + 1
end_page = all_count_pages_number
else:
start_page = request_page_num - half_page # 定义开始的页码
end_page = request_page_num + half_page # 定义结束的页码
html_list = [] # 定义一个空的列表
first_li = '<li><a href="/crm/practice_page/?page=1">首页</a></li>' # 首页
html_list.append(first_li) # 添加首页
if request_page_num == 1: # 请求页(当前页)为第一页的话
pre_li = '<li class="disabled"><a href="#"><<</a></li>'
else:
pre_li = '<li><a href="/crm/practice_page/?page={}"><<</a></li>'.format(request_page_num - 1)
html_list.append(pre_li)
for num in range(start_page, end_page + 1):
if request_page_num == num: # 增加active样式
li_html = '<li class="active"><a href="/crm/practice_page/?page={0}">{0}</a></li>'.format(num)
else:
li_html = '<li><a href="/crm/practice_page/?page={0}">{0}</a></li>'.format(num)
html_list.append(li_html) # 添加下一页
if request_page_num == all_count_pages_number: # 如果已经是请求的最后一页
next_li = '<li class="disabled"><a href="#">>></a></li>'
else:
next_li = '<li><a href="/crm/practice_page/?page={}">>></a></li>'.format(request_page_num + 1)
html_list.append(next_li)
last_li = '<li><a href="/crm/practice_page/?page={}">尾页</a></li>'.format(all_count_pages_number)
html_list.append(last_li) # 添加尾页
html_str = mark_safe(''.join(html_list))
'''
切片请求数量
页数 从 到
1 0 9
2 10 19
n (n-1)*10
'''
each_page_start_number = (request_page_num - 1) * each_page_show_number
each_page_end_number = request_page_num * each_page_show_number
return render(request,
'crm/practice_page.html',
{'users': users[each_page_start_number:each_page_end_number],
# 'pages': range(start_page, end_page + 1),
'html_str': html_str})
"""
分页器
"""
from django.utils.safestring import mark_safe
class Pagination:
def __init__(self, request, all_data_length, each_page_show_number=10, max_show_page=11):
"""
:param request:
:param all_data_length: 数据的总长度
:param each_page_show_number: 每一页需要展示多少条数据,默认 10 条
:param max_show_page: 最大显示多少页
"""
self.url = request.path_info
self.each_page_show_number = each_page_show_number
try:
self.request_page_num = int(request.GET.get('page', 1)) # 获取请求页
if self.request_page_num <= 0:
self.request_page_num = 1
except Exception as e:
print('{}:分页请求参数非法!'.format(str(e)))
self.request_page_num = 1
self.request_page_num = int(self.request_page_num) # 转化为 int 类型
self.all_count_pages_number, more_page = divmod(all_data_length, each_page_show_number)
if more_page: # 如果有余数的话
self.all_count_pages_number += 1
half_page = max_show_page // 2 # 获取中间页码
if self.all_count_pages_number <= max_show_page: # 如果我的总的页数加起来还不满 11 格
self.start_page = 1 # 起始页写死为 1
self.end_page = self.all_count_pages_number # 最后一页同样写死
else:
if self.request_page_num - half_page <= 0: # start开始出现 0 了
self.start_page = 1 # 卡死第一页是 1
self.end_page = max_show_page # 最后一页是 最大允许显示的页数
elif self.request_page_num + half_page >= self.all_count_pages_number: # 如果已经最大了
self.start_page = self.all_count_pages_number - max_show_page + 1
self.end_page = self.all_count_pages_number
else:
self.start_page = self.request_page_num - half_page # 定义开始的页码
self.end_page = self.request_page_num + half_page # 定义结束的页码
@property
def each_page_start_number(self):
"""
:return:但会某一页的开头的信息序号
"""
return (self.request_page_num - 1) * self.each_page_show_number
@property
def each_page_end_number(self):
return self.request_page_num * self.each_page_show_number
@property
def html_str(self):
html_list = [] # 定义一个空的列表
first_li = '<li><a href="{}?page=1">首页</a></li>'.format(self.url) # 首页
html_list.append(first_li) # 添加首页
if self.request_page_num == 1: # 请求页(当前页)为第一页的话
pre_li = '<li class="disabled"><a href="#"><<</a></li>'
else:
pre_li = '<li><a href="{}?page={}"><<</a></li>'.format(self.url, self.request_page_num - 1)
html_list.append(pre_li)
for num in range(self.start_page, self.end_page + 1):
if self.request_page_num == num: # 增加active样式
li_html = '<li class="active"><a href="{0}?page={1}">{1}</a></li>'.format(self.url, num)
else:
li_html = '<li><a href="{0}?page={1}">{1}</a></li>'.format(self.url, num)
html_list.append(li_html) # 添加下一页
if self.request_page_num == self.all_count_pages_number: # 如果已经是请求的最后一页
next_li = '<li class="disabled"><a href="#">>></a></li>'
else:
next_li = '<li><a href="{}?page={}">>></a></li>'.format(self.url, self.request_page_num + 1)
html_list.append(next_li)
last_li = '<li><a href="{}?page={}">尾页</a></li>'.format(self.url, self.all_count_pages_number)
html_list.append(last_li) # 添加尾页
html_str = mark_safe(''.join(html_list))
return html_str
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。