分页系统

1.后台固定--生成一个分页规则类,可以直接调用
class PageInfo(object):
def __init__(self,current_page,all_count, per_page, base_url, show_page=11,):
'''

:param current_page: 当前的页数
:param all_count: 数据库总行数
:param per_page: 每页显示行数
:param base_url: 传递url
:param show_page: 设置展示的页数
'''
try:
self.current_page = int(current_page)
except Exception as e:
self.current_page = 1
self.all_count = all_count
self.per_page = per_page

a, b = divmod(all_count, per_page)
if b:
a = a+1
self.all_pager = a
self.show_page = show_page
self.base_url = base_url
def start(self):
return (self.current_page-1) * self.per_page

def end(self):
return self.current_page * self.per_page


def pager(self):
page_list = []

half = int((self.show_page-1)/2)
# 如果数据总页数 < 11
if self.all_pager<self.show_page:
begin = 1
stop = self.all_pager + 1
# 如果数据总页数 > 11
else:
if self.current_page <= half:
begin = 1
stop = self.show_page + 1
else:
# 如果当前页 <=5,永远显示1,11
if self .current_page + half > self.all_pager:
begin = self.all_pager - self.show_page + 1
stop = self.all_pager + 1
else:
begin = self.current_page - half
stop = self.current_page + half + 1
if self.current_page <= 1:
prev = "<li><a href='#'>上一页</a></li>"
else:
prev = "<li><a href='%s?page=%s'>上一页</a></li>" % (self.base_url, self.current_page - 1,)
page_list.append(prev)

for i in range(begin, stop):
if i == self.current_page:
temp ='<li class="active"><a href="%s?page=%s">%s</a></li>'%(self.base_url, i, i)
else:
temp ='<li><a href="%s?page=%s">%s</a></li>'%(self.base_url, i, i)

page_list.append(temp)

if self.current_page >= self.all_pager:
nex = "<li><a href='#'>下一页</a></li>"
else:
nex = "<li><a href='%s?page=%s'>下一页</a></li>" %(self.base_url, self.current_page+1,)
page_list.append(nex)

return ''.join(page_list)

2.导入类,调用其方法
from utils.pager import PageInfo

def custom(request):
all_count = models.User.objects.all().count()
page_info = PageInfo(request.GET.get('page'), all_count, 10, '/custom.html', 11)
user_list = models.User.objects.all()[page_info.start():page_info.end()]

return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})

3.前端html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分页</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
<h1>分页列表</h1>
<ul>
{% for row in user_list %}
<li>{{ row.name }}</li>
{% endfor %}
</ul>
<nav aria-label="Page navigation">
<ul class="pagination">
{{ page_info.pager|safe }}
</ul>
</nav>

</body>
</html>
 


原文地址:https://www.cnblogs.com/jmc218/p/13743727.html