Django-自定义分页组件
1.封装的分页代码:
class PageInfo(object): def __init__(self,current_page,all_count,per_page,base_url,show_page=7): ''' :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: #出错就让当前页=1 self.current_page =1 #每页显示的行数 self.per_page = per_page #内置函数,总行数,每页的行数= 整数,余数 a,b = divmod(all_count,per_page) #b:余数。如果是有数即True if b: #有余数就在总页数上+1 a +=1 #总页数 self.all_pager = a #显示的页码数 self.show_page = show_page #跳转的url,可以供不同的功能,如:学生管理,老师管理.....等 self.base_url = base_url #起始函数 def start(self): #(当前页 - 1) * 每页行数 return (self.current_page - 1) * self.per_page #结束函数 def end(self): #当前页*页面行数 return self.current_page * self.per_page def pager(self): #存放页码 page_list = [] #当前页面中显示的页码-1/2,左右显示的数量 half = int((self.show_page-1)/2) #如果数据总页数<7 if self.all_pager < self.show_page: #重新设定起始值和结束值 begin = 1 stop = self.all_pager +1 # 如果数据总页数>7 else: #如果当前页 <= 3 ,永远显示1,7 if self.current_page <= half: begin = 1 stop = self.show_page + 1 else: #当前页 + 3 > 总页数 if self.current_page + half > self.all_pager: #总页数 - 显示的页数 + 1 begin = self.all_pager - self.show_page + 1 #总页数 + 1 stop = self.all_pager + 1 # 当前页 + 3 < 总页数 else: #当前页码 - 3 begin = self.current_page - half #当前页码 + 3 + 1 stop = self.current_page + half + 1 #当前页码<=1,就让当前的上一页刷新当前页面 if self.current_page <= 1: # prev = '<li><a href="#">上一页</a></li>' #如果是1,就让上一页消失 prev = '' #当前页码>1,就让当前的上一页加1,持续进行分页操作 else: prev = '<li><a href="%s?page=%s">上一页</a></li>'%(self.base_url,self.current_page-1,) #将页码存入到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 + 1,) #添加到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,10,'/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>
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。大数据SRE(运维开发)学习交流群239963844
posted on 2017-08-02 19:42 bigdata_devops 阅读(199) 评论(0) 编辑 收藏 举报