flask 分页查询,flask分页返回数据到前端

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: