flask 分页查询,flask分页返回数据到前端
在网开发中,分页是必不可少的功能,烧瓶实现展示内容的分页也非常简单,这里通过实例来学习一下瓶如何为网站分页。
首先,自定义一个分页工具类page_utils:
fromurllibimporturlencode
类分页(对象):
def__init__(self,current_page,total_count,base_url,params,per_page_count=10,max_pager_count=11):
尝试:
当前页面=int(当前页面)
异常异常:
current_page=1
ifcurrent_page=0:
current_page=1
self.current _ page=当前页面
self.total _count=总计_计数
self.per _ page _ count=每一页计数
max_page_num,div=divmod(total_count,per_page_count)
ifdiv:
max_page_num=1
self.max _ page _ num=最大页数
自我。最大寻呼次数=最大寻呼次数
自我。half _ max _ pager _ count=int((max _ pager _ count-1)/2)
self.base_url=base_url
导入副本
params=copy.deepcopy(params)
get_dict=params.to_dict()
self.param
s=get_dict
@property
defstart(self):
return(self.current_page-1)*self.per_page_count
@property
defend(self):
returnself.current_page*self.per_page_count
defpage_html(self):
ifself.max_page_num<=self.max_pager_count:
pager_start=1
pager_end=self.max_page_num
#如果总页数>11
else:
ifself.current_page<=self.half_max_pager_count:
pager_start=1
pager_end=self.max_pager_count
else:
if(self.current_page+self.half_max_pager_count)>self.max_page_num:
pager_end=self.max_page_num
pager_start=self.max_page_num-self.max_pager_count+1#倒这数11个
else:
pager_start=self.current_page-self.half_max_pager_count
pager_end=self.current_page+self.half_max_pager_count
page_html_list=[]
self.params['page']=1
first_page='<li><ahref="%s?%s">首页</a></li>'.decode("utf-8")%(self.base_url,urlencode(self.params),)
page_html_list.append(first_page)
self.params["page"]=self.current_page-1
ifself.params["page"]<1:
pervious_page='<liclass="disabled"><ahref="%s?%s"aria-label="Previous">上一页</span></a></li>'.
decode("utf-8")%(self.base_url,urlencode(self.params))
else:
pervious_page='<li><ahref="%s?%s"aria-label="Previous">上一页</span></a></li>'.decode("utf-8")%
(self.base_url,urlencode(self.params))
page_html_list.append(pervious_page)
#中间页码
foriinrange(pager_start,pager_end+1):
self.params['page']=i
ifi==self.current_page:
temp='<liclass="active"><ahref="%s?%s">%s</a></li>'%(self.base_url,urlencode(self.params),i,)
else:
temp='<li><ahref="%s?%s">%s</a></li>'%(self.base_url,urlencode(self.params),i,)
page_html_list.append(temp)
self.params["page"]=self.current_page+1
ifself.params["page"]>self.max_page_num:
self.params["page"]=self.current_page
next_page='<liclass="disabled"><ahref="%s?%s"aria-label="Next">下一页</span></a></li>'.decode
("utf-8")%(self.base_url,urlencode(self.params))
else:
next_page='<li><ahref="%s?%s"aria-label="Next">下一页</span></a></li>'.decode("utf-8")%
(self.base_url,urlencode(self.params))
page_html_list.append(next_page)
self.params['page']=self.max_page_num
last_page='<li><ahref="%s?%s">尾页</a></li>'.decode("utf-8")%(self.base_url,urlencode(self.params),)
page_html_list.append(last_page)
return''.join(page_html_list)自定义方法中的参数:
current_page——表示当前页。
total_count——表示数据总条数。
base_url——表示分页URL前缀,请求的前缀获取可以通过Flask的request.path方法,无需自己指定。
例如:我们的路由方法为@app.route('/test'),request.path方法即可获取/test。
params——表示请求传入的数据,params可以通过request.args动态获取。
例如:我们链接点击为:http://localhost:5000/test?page=10,此时request.args获取数据为ImmutableMultiDict([('page', u'10')])
per_page_count——指定每页显示数。
max_pager_count——指定页面显示页码
接着,我们使用一个测试方法来使用这个工具类,达到分页效果,test.py:
fromflaskimportFlask,render_template,request
在上面的程序中,li为我们要分页的对象,数组list,我们获取到这个list之后,把他用工具类中的起止方法包起来。
传递数据用包装后的list,这样就达到了需要哪一段数据我们传递哪一段的效果,包装的方法:index_list = li[pager_obj.start:pager_obj.end]
我们用一个HTML页面去显示它,分页样式不是重点,我们这里直接引入bootstrap封装好的分页效果,代码如下:
<!DOCTYPEhtml>
这样一个分页的效果就做好了,我们查看效果,如下图:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。