
正文
Django-自定义分页组件
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1.封装的分页代码:
class PageInfo(object):
def __init__(self,current_page,all_count,per_page,base_url,show_page=):
''' :param current_page: 当前页面
:param all_count: 总行数
:param per_page: 每页显示的行数
:param base_url: 要跳转的url
:param shpw_page: 显示多少个页面,默认为7
'''
try:
#当前页面
self.current_page = int(current_page)
except Exception as e:
#出错就让当前页=
self.current_page = #每页显示的行数
self.per_page = per_page #内置函数,总行数,每页的行数= 整数,余数
a,b = divmod(all_count,per_page) #b:余数。如果是有数即True
if b:
#有余数就在总页数上+
a +=
#总页数
self.all_pager = a
#显示的页码数
self.show_page = show_page #跳转的url,可以供不同的功能,如:学生管理,老师管理.....等
self.base_url = base_url
#起始函数
def start(self):
#(当前页 - ) * 每页行数
return (self.current_page - ) * self.per_page #结束函数
def end(self):
#当前页*页面行数
return self.current_page * self.per_page def pager(self):
#存放页码
page_list = [] #当前页面中显示的页码-/,左右显示的数量
half = int((self.show_page-)/) #如果数据总页数<
if self.all_pager < self.show_page:
#重新设定起始值和结束值
begin =
stop = self.all_pager +
# 如果数据总页数>
else:
#如果当前页 <= ,永远显示1,
if self.current_page <= half:
begin =
stop = self.show_page +
else:
#当前页 + > 总页数
if self.current_page + half > self.all_pager:
#总页数 - 显示的页数 +
begin = self.all_pager - self.show_page +
#总页数 +
stop = self.all_pager +
# 当前页 + < 总页数
else:
#当前页码 -
begin = self.current_page - half
#当前页码 + +
stop = self.current_page + half +
#当前页码<=,就让当前的上一页刷新当前页面
if self.current_page <= :
# prev = '<li><a href="#">上一页</a></li>'
#如果是1,就让上一页消失
prev = ''
#当前页码>,就让当前的上一页加1,持续进行分页操作
else:
prev = '<li><a href="%s?page=%s">上一页</a></li>'%(self.base_url,self.current_page-,)
#将页码存入到list中
page_list.append(prev) #遍历页码,起始值————结束值
for i in range(begin,stop):
#i == 当前的页码
if i == self.current_page:
#就给当前的页码添加一个样式,以便区分当前选中的页码是多少
temp = '<li class="active" ><a href="%s?page=%s">%s</a></li>'%(self.base_url,i,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>'
nex = ''
# 当前页小于总页数
else:
#每点击下一页进行加1
nex = '<li><a href="%s?page=%s">下一页</a></li>'%(self.base_url,self.current_page + ,)
#添加到list中
page_list.append(nex)
#字符串拼接
return ''.join(page_list)
2.调用分页的函数:views.py中
#运行的函数
def custom(request):
#总行数
all_count = models.UserInfo.objects.all().count() #调用分页的class,并实例化对象。当前页码|总页码数|每页显示的行数|跳转的url
page_info = PageInfo(request.GET.get('page'),all_count,,'/custom.html')
#拿到我所有的数据
user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()] return render(request,'custom.html',locals())
3.路由系统:urls.py
url(r'^custom.html$', views.custom),
4.html中的代码 :使用了bootstrap中的分页组件样式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/css/bootstrap.min.css" />
</head>
<body>
<h1>用户表</h1>
<ul>
{% for row in user_list %}
<li>{{ row.name }}|{{ row.age }}|{{ row.ug.title }}</li>
{% endfor %} </ul>
{# 使用的bootstrap中的组件#}
<nav aria-label="Page navigation">
<ul class="pagination">
{# page_info.pager|safe:显示我定义好的pager函数,并且使用模板中的safe方法,让在后端写的标签生效,不写safe,那么前端页面原样输出我写的标签#}
{{ page_info.pager|safe }}
</ul>
</nav>
</body>
</html>







