pager.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div class="container">
  9. <div class="row " style="margin-top: 10px">
  10. <ul>
  11. {% for foo in index_list %}
  12. <li>{{ foo }}</li>
  13. {% endfor %}
  14. </ul>
  15. <nav aria-label="Page navigation" class="pull-right">
  16. <ul class="pagination">
  17. {{ html|safe }}
  18. </ul>
  19. </nav>
  20. </div>
  21. </div>
  22. </body>
  23. </html>

pager.py

  1. from urllib.parse import urlencode,quote,unquote
  2. class Pagination(object):
  3. def __init__(self,current_page,total_count,base_url,params,per_page_count=10,max_pager_count=11):
  4. try:
  5. current_page = int(current_page)
  6. except Exception as e:
  7. current_page = 1
  8. if current_page <=0:
  9. current_page = 1
  10. self.current_page = current_page
  11. # 数据总条数
  12. self.total_count = total_count
  13. # 每页显示10条数据
  14. self.per_page_count = per_page_count
  15. # 页面上应该显示的最大页码
  16. max_page_num, div = divmod(total_count, per_page_count)
  17. if div:
  18. max_page_num += 1
  19. self.max_page_num = max_page_num
  20. # 页面上默认显示11个页码(当前页在中间)
  21. self.max_pager_count = max_pager_count
  22. self.half_max_pager_count = int((max_pager_count - 1) / 2)
  23. # URL前缀
  24. self.base_url = base_url
  25. # request.GET
  26. import copy
  27. params = copy.deepcopy(params)
  28. # params._mutable = True
  29. get_dict = params.to_dict()
  30. # 包含当前列表页面所有的搜/索条件
  31. # {source:[2,], status:[2], gender:[2],consultant:[1],page:[1]}
  32. # self.params[page] = 8
  33. # self.params.urlencode()
  34. # source=2&status=2&gender=2&consultant=1&page=8
  35. # href="/hosts/?source=2&status=2&gender=2&consultant=1&page=8"
  36. # href="%s?%s" %(self.base_url,self.params.urlencode())
  37. self.params = get_dict
  38. @property
  39. def start(self):
  40. return (self.current_page - 1) * self.per_page_count
  41. @property
  42. def end(self):
  43. return self.current_page * self.per_page_count
  44. def page_html(self):
  45. # 如果总页数 <= 11
  46. if self.max_page_num <= self.max_pager_count:
  47. pager_start = 1
  48. pager_end = self.max_page_num
  49. # 如果总页数 > 11
  50. else:
  51. # 如果当前页 <= 5
  52. if self.current_page <= self.half_max_pager_count:
  53. pager_start = 1
  54. pager_end = self.max_pager_count
  55. else:
  56. # 当前页 + 5 > 总页码
  57. if (self.current_page + self.half_max_pager_count) > self.max_page_num:
  58. pager_end = self.max_page_num
  59. pager_start = self.max_page_num - self.max_pager_count + 1 #倒这数11个
  60. else:
  61. pager_start = self.current_page - self.half_max_pager_count
  62. pager_end = self.current_page + self.half_max_pager_count
  63. page_html_list = []
  64. # {source:[2,], status:[2], gender:[2],consultant:[1],page:[1]}
  65. # 首页
  66. self.params['page'] = 1
  67. first_page = '<li><a href="%s?%s">首页</a></li>' % (self.base_url,urlencode(self.params),)
  68. page_html_list.append(first_page)
  69. # 上一页
  70. self.params["page"] = self.current_page - 1
  71. if self.params["page"] < 1:
  72. pervious_page = '<li class="disabled"><a href="%s?%s" aria-label="Previous">上一页</span></a></li>' % (self.base_url, urlencode(self.params))
  73. else:
  74. pervious_page = '<li><a href = "%s?%s" aria-label = "Previous" >上一页</span></a></li>' % ( self.base_url, urlencode(self.params))
  75. page_html_list.append(pervious_page)
  76. # 中间页码
  77. for i in range(pager_start, pager_end + 1):
  78. self.params['page'] = i
  79. if i == self.current_page:
  80. temp = '<li class="active"><a href="%s?%s">%s</a></li>' % (self.base_url,urlencode(self.params), i,)
  81. else:
  82. temp = '<li><a href="%s?%s">%s</a></li>' % (self.base_url,urlencode(self.params), i,)
  83. page_html_list.append(temp)
  84. # 下一页
  85. self.params["page"] = self.current_page + 1
  86. if self.params["page"] > self.max_page_num:
  87. self.params["page"] = self.current_page
  88. next_page = '<li class="disabled"><a href = "%s?%s" aria-label = "Next">下一页</span></a></li >' % (self.base_url, urlencode(self.params))
  89. else:
  90. next_page = '<li><a href = "%s?%s" aria-label = "Next">下一页</span></a></li>' % (self.base_url, urlencode(self.params))
  91. page_html_list.append(next_page)
  92. # 尾页
  93. self.params['page'] = self.max_page_num
  94. last_page = '<li><a href="%s?%s">尾页</a></li>' % (self.base_url, urlencode(self.params),)
  95. page_html_list.append(last_page)
  96. return ''.join(page_html_list)

app.py

  1. from flask import Flask,render_template,request,redirect
  2. from pager import Pagination
  3. from urllib.parse import urlencode
  4. app = Flask(__name__)
  5. @app.route('/pager')
  6. def pager():
  7. li = []
  8. for i in range(1,100):
  9. li.append(i)
  10. pager_obj = Pagination(request.args.get("page",1),len(li),request.path,request.args,per_page_count=10)
  11. index_list = li[pager_obj.start:pager_obj.end]
  12. html = pager_obj.page_html()
  13. return render_template("pager.html",index_list=index_list, html = html)
  14. if __name__ == '__main__':
  15. app.run(debug=True)

Flask 实现分页的更多相关文章

  1. 4、flask之分页插件的使用、添加后保留原url搜索条件、单例模式

    本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...

  2. flask之分页插件的使用、添加后保留原url搜索条件、单例模式

    本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...

  3. flask 前端 分页 显示

    # flask 前端 分页 显示 1.分页原理 web查询大量数据并显示时有有三种方式: 从数据库中查询全部,在view/客户端筛选/分页:不能应对记录大多的情况,一般不使用: 分页查询,每次在数据库 ...

  4. Flask系列(五)Flask实现分页

    一.flask分页组件 from urllib.parse import urlencode,quote,unquote class Pagination(object): ""& ...

  5. flask的分页功能

    分页是个很通用的东西,在flask中,有一个macro的语法,类似于宏,我们可以将通用的东西通过macro写入单独的html文件以方便维护,减少代码量.下面是我的分页的macro文件render_pa ...

  6. Flask实现分页功能

    可以参考: https://blog.csdn.net/weixin_36380516/article/details/80295101 也可以参考我的代码: https://github.com/z ...

  7. Flask构建微电影(一)

    第一章.项目介绍  1.1.前言    本教程我将带领大家如何使用flask框架开发微电影网站.Flask是python中最受欢迎的轻量级web框架,flask扩展丰富,冗余度小,可自由选择组合各种插 ...

  8. Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

  9. python操作三大主流数据库(4)python操作mysql④python服务端flask和前端bootstrap框架结合实现新闻展示

    python操作mysql④python服务端flask和前端bootstrap框架结合实现新闻展示 参考文档http://flask.pocoo.org/docs/0.11/http://flask ...

随机推荐

  1. SpringMVC-03 RestFul和控制器

    SpringMVC-03 RestFul和控制器 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. ...

  2. 测试平台系列(2) 给Pity添加配置

    给Pity添加配置 回顾 还记得上篇文章创立的「Flask」实例吗?我们通过这个实例,给根路由 「/」 绑定了一个方法,从而使得用户访问不同路由的时候可以执行不同的方法. 配置 要知道,在一个「Web ...

  3. WPF 基础 - Binding 对数据的转换和校验

    1. Binding 对数据的转换和校验 Binding 中,有检验和转换关卡. 1.1 数据校验 源码: namespace System.Windows.Data { public class B ...

  4. 利用eigen库简单实现矩阵功能

    eigen是目前运行速度较快的C++矩阵运算库,而且其轻便小巧安装方便的特点简直是吸引人啊!特做此笔记,记录一下这个安装简单.体积轻巧.功能强大的C++库. 1. Download and Insta ...

  5. L3-021 神坛 (叉积排序+向量积求面积)

    题目链接 https://pintia.cn/problem-sets/994805046380707840/problems/994805046577840128 题意:给定n个点求三角形最小面积: ...

  6. MyBatis简单的CRUD操作

    Dao接口 package com.ttpfx.dao; import com.ttpfx.domain.User; import java.util.List; public interface U ...

  7. windows 以管理员身份运行 代码

    1 // 以管理员身份运行本进程 2 // 1 获取本进程的文件路径. 3 TCHAR path[MAX_PATH] = { 0 }; // 需要初始化 4 DWORD dwPathSize = MA ...

  8. Powerful Number 筛学习笔记

    Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...

  9. Linux命令的应用

    目录 Linux命令 Linux文件管理命令 用户管理 权限管理 vi文本编辑器 find查找命令 磁盘管理命令 压缩及解压 Linux 进程 Linux运行tomcat Linux安装mysql 卸 ...

  10. 学习笔记-vue+quill简单的后台demo

    功能比较单一 https://github.com/opceclee/vue-quill