分页功能
在app中建立一个pagination.py文件 , 封装在Pagination类中.
class Pagination:
def __init__(self, page_num, all_count, per_num=15, max_show=11):
# 输入错误的地址, 默认改为1
try:
self.page_num = int(page_num)
if self.page_num <= 0:
self.page_num = 1
except Exception as e:
self.page_num = 1
# 总的数据量
self.all_count = all_count
# 每页显示的数据条数
self.per_num = per_num
# 总页码数
self.total_page_num, more = divmod(all_count, per_num)
# 总页数取余数加1
if more:
self.total_page_num += 1
# 最多显示的页面数
self.max_show = max_show
self.half_show = max_show // 2
@property
def start(self):
"""
数据切片的起始值
:return:
"""
return (self.page_num - 1) * self.per_num
@property
def end(self):
"""
数据切片的终止值
:return:
"""
return self.page_num * self.per_num
# 动态页面, 将数据在后端做校验
@property
def page_html(self):
if self.total_page_num < self.max_show: # 页码数不满足最大显示数
page_start = 1
page_end = self.total_page_num
elif self.page_num <= self.half_show:
page_start = 1
page_end = self.max_show
elif self.page_num + self.half_show > self.total_page_num:
page_start = self.total_page_num - self.max_show + 1
page_end = self.total_page_num
else:
# 起始的页面
page_start = self.page_num - self.half_show
# 终止的页码
page_end = self.page_num + self.half_show
page_list = []
# 上一页
if self.page_num == 1:
page_list.append('<li class="disabled" ><a >上一页</a></li>')
else:
page_list.append('<li ><a href="?page={}">上一页</a></li>'.format(self.page_num - 1))
for i in range(page_start, page_end + 1):
if i == self.page_num:
page_list.append('<li class="active" ><a href="?page={}">{}</a></li>'.format(i, i))
else:
page_list.append('<li><a href="?page={}">{}</a></li>'.format(i, i))
# 下一页
if self.page_num == self.total_page_num:
page_list.append('<li class="disabled"><a>下一页</a></li>')
else:
page_list.append('<li><a href="?page={}">下一页</a></li>'.format(self.page_num + 1))
return ''.join(page_list)
view.py中的文件
userlist = [{'name': 'jason-{}'.format(i), 'pwd': 'lucky-{}'.format(i)} for i in range(1, 302)]
from crm.utils.pagination import Pagination
def user_list(request):
page = Pagination(request.GET.get('page'), len(userlist))
return render(request, 'user_list.html', {'users': userlist[page.start: page.end], 'page_html': page.page_html})
模板中
<table class="table table-bordered table-hover">
<tbody>
{% for user in users %}
<tr>
<td>{{ user.name }}</td>
<td>{{ user.pwd }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<ul class="pagination">
{{ page_html|safe }}
</ul>