17flask分页
一,flask_sqlachemy的使用
如果想要展示出来的页面是分页显示,则首先需要知道每页应该分多少个条目,然后通过数据库去查找对应的条数,同时也需要和分页所需的“paginate”结合使用。
先贴代码:
1 @app.route('/')
2 def index():
3 # 原始代码
4 # context = {
5 # 'questions':Question.query.order_by('create_time').all() #注意all()
6 # }
7 # # print(context)
8 # return render_template('index.html',**context) #**的使用
9 # print(request.args.get('page'))
10
11 #分页代码
12 # print(request.args.get('page',1))
13 page = int(request.args.get('page', 1))
14 per_page = int(request.args.get('per_page', 3))
15 # 上面两行别丢了,不能用下面的下,不然不能知道当前页了。
16 #page = 1
17 #per_page = 3
18
19 paginate = Question.query.order_by(db.desc(Question.create_time)).paginate(page, per_page, error_out=False)
20 #这行代码首先根据“db.desc(Question.create_time)“按照创建时间拍个序号,
21 #然后“.paginate(page, per_page, error_out=False)”就成,没啥特殊操作。
22 questions = paginate.items
23 # 将项目与paginate对应
24
25 question_max_id = Question.query.order_by(db.desc(Question.id)).first().id
26
27 context = {
28 'paginate': paginate,
29 'questions': questions,
30 'question_max_id': question_max_id
31 #这里我加入了一个最大序号,是为了将最新的条目加“new”标记。
32 }
33
34 return render_template('index.html', **context) # **的使用。
原始代码是没有分页的情况。
先看看分页代码中的paginate的用法:
paginate(page, per_page, error_out=True)
page 当前页数
per_page 每页显示的条数
error_out 是否打印错误信息,Flase表页码超出后返回空,否则返回404.
二,jinja2显示
先贴代码
1 {% extends 'base.html' %}
2 {% block title %}首页{% endblock %}
3
4 {% block head %}
5 <meta charset="UTF-8">
6 <link rel="stylesheet" href="{{ url_for('static',filename = "css/index.css") }}">
7 {% endblock %}
8
9 {% block main %}
10 <ul>
11 {% for question in questions %}
12
13 <li>
14 <div class="question-list-group">
15 <img src="{{ url_for('static',filename = "images/dajun1.png")}}" alt="" class="avatar">
16 </div>
17
18 <div class="question-group">
19
20 <p class="question-title">
21 {# <a href="{{ url_for('detail',question_id = question.id) }}">{{ question.title }}</a>#}
22 {# 如果当前的问题id大于==id,则给它一个new标签,否则就按照常规输出#}
23 {% if question.id == question_max_id %}
24 {# <h6>{{ question.title }} <span class="label label-default">New</span></h6>#}
25 <a href="{{ url_for('detail',question_id = question.id) }}">{{ question.title }}</a> <span class="label label-default">New</span>
26 {% else %}
27 <a href="{{ url_for('detail',question_id = question.id) }}">{{ question.title }}</a>
28 {% endif %}
29
30 {# #这里注意下带其他参数的question_id的用法#}
31 </p>
32
33 <p class="question-content" >
34 {# 这里的使得把形如“<p> 打撒</p><p> </p>”这样的文本按照样式显示出来。#}
35 {{ question.content|safe }}
36 </p>
37
38 <div class="question-info">
39 <span class="question-author">
40 <a href="{{ url_for('other_user_info',anwser_name =question.author.username) }}">{{ question.author.username }}</a>
41 </span>
42
43 <span class="question-time">
44 {{ question.create_time }}
45 </span>
46 </div>
47
48 </div>
49 </li>
50
51 {% endfor %}
52
53 {# 当前页数:{{ paginate.page }}#}
54 {# 总页数:{{ paginate.pages }}#}
55 {# 一共有{{ paginate.total }}条数据#}
56 {# <br>#}
57
58 {# {% if paginate.has_prev %}#}
59 {# <a href="?page={{ paginate.prev_num }}">上一页</a>#}
60 {# {% endif %}#}
61 {# 页码:#}
62 {##}
63 {# {% for i in paginate.iter_pages() %}#}
64 {# <a href="?page={{ i }}">{{ i }}</a>#}
65 {# {% endfor %}#}
66 {##}
67 {# {% if paginate.has_next %}#}
68 {# <a href="?page={{ paginate.next_num }}">下一页</a>#}
69 {# {% endif %}#}
70 {# </ul>#}
71
72
73 {#下面是只有前后页的情况#}
74 {#<nav aria-label="...">#}
75 {# <ul class="pager">#}
76 {# <li class="previous"><a href="?page={{ paginate.prev_num }}"><span aria-hidden="true">←</span> 上一页</a></li>#}
77 {# {% if paginate.page ==1 %}#}
78 {# <li class="previous"><a href="#"><span aria-hidden="true">←</span> 上一页</a></li>#}
79 {# {% else %}#}
80 {# <li class="previous"><a href="?page={{ paginate.prev_num }}"><span aria-hidden="true">←</span> 上一页</a></li>#}
81 {# {% endif %}#}
82 {# {% if paginate.page >= paginate.pages %}#}
83 {# <li class="next"><a href=#">下一页 <span aria-hidden="true">→</span></a></li>#}
84 {# {% else %}#}
85 {# <li class="next"><a href="?page={{ paginate.next_num }}">下一页 <span aria-hidden="true">→</span></a></li>#}
86 {# {% endif %}#}
87 {# </ul>#}
88 {#</nav>#}
89
90 {#下面是直接点每一页 加 前后页的情况#}
91 <nav aria-label="...">
92 <ul class="pagination">
93 {# 当前页面为第一页,则把前翻disable#}
94 {% if paginate.page == 1 %}
95 <li class="disable">
96 <span>
97 <span aria-hidden="true">«</span>
98 </span>
99 </li>
100 {% else %}
101 <li class="active">
102 <span>
103 <span aria-hidden="true">«</span>
104 </span>
105 </li>
106 {% endif %}
107
108 {#要用“paginate.iter_pages()”,这里不能用“paginate.pages”(总页数),不然会返回“TypeError: 'int' object is not iterable”#}
109 {% for i in paginate.iter_pages() %}
110 <li class="active">
111 <a href="?page={{ i }}">{{ i }}</a>
112 </li>
113 {% endfor %}
114
115 {# 当前页面为最后一页,则把前翻disable#}
116 {% if paginate.page == paginate.pages %}
117 <li class="disable">
118 <span>
119 <span aria-hidden="true">»</span>
120 </span>
121 </li>
122 {% else %}
123 <li class="active">
124 <span>
125 <span aria-hidden="true">»</span>
126 </span>
127 </li>
128 {% endif %}
129
130 </ul>
131
132 </nav>
133
134 <span class="label label-success"> 当前页数:{{ paginate.page }}</span>
135 <span class="label label-warning">总页数:{{ paginate.pages }}</span>
136 <span class="label label-danger">一共有{{ paginate.total }}条数据</span>
137 {#{{ (paginate.page /paginate.pages)*100}}#}
138 <br>
139 <div class="progress">
140 <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: {{ (paginate.page /paginate.pages)*100}}%">
141 <span class="sr-only">45% Complete</span>
142 </div>
143 </div>
144
145 {# 总页数:{{ paginate.pages }}#}
146 {# 一共有{{ paginate.total }}条数据#}
147
148
149 {% endblock %}
行1:引用模板。
行9--行149是block块。
行10--51显示一中的行29内的内容。
行22--28,把最新的条目加“new”标记。
行73的代码能用,是只有前页和后页的情况。
行93--106当前页面为1,则前翻disable。行116同。
注意:行109中是“for i in paginate.iter_pages()”而非“paginate.pages”,不然会显示“TypeError: 'int' object is not iterable”。
行140是翻页进度条,这是据下载条改的,bootstrap都有。
17flask分页的更多相关文章
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...
- js实现前端分页页码管理
用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- MVC如何使用开源分页插件shenniu.pager.js
最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- 套用JQuery EasyUI列表显示数据、分页、查询
声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...
- php实现的分页类
php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...
- C#关于分页显示
---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...
- JAVA 分页工具类及其使用
Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...
随机推荐
- Windows Server 2003 蓝屏 -- 系统故障:停止错误
Windows Server 2003 EE 出现蓝屏: 0X0000004D (0X000f27D9, 0X000F27D9, 0X0000000C, 0X00000000) 蓝屏拍照: 重启机器 ...
- Hadoop框架:NameNode工作机制详解
本文源码:GitHub·点这里 || GitEE·点这里 一.存储机制 1.基础描述 NameNode运行时元数据需要存放在内存中,同时在磁盘中备份元数据的fsImage,当元数据有更新或者添加元数据 ...
- background-size 详解
backgroun-size:cover; .是按照等比缩放铺满整个区域.主要用于图片比div小的时候,将图片按照某一边的比例扩大以填充整个div背景. .优点:图片不会被拉升,且实用于div长度和宽 ...
- vscode 插件保存记录
- 多测师讲解python _函数的传递_高级讲师肖sir
题目: 要求1.通过函数来实现 2.引用函数传递方法 3.引用返回值 有一个登录系统:账号admin 密码123456 验证码abc123 账号.密码.验证码 ...
- MySQL【灵魂拷问】
MySQL 一直是本人薄弱的部分,后面会多总结 MySQL 的文章,毕竟 MySQL 涉及到数据存储.锁.磁盘寻道.分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后面要加紧对 ...
- .NetCore 异步编程 - async/await
前言: 这段时间开始用.netcore做公司项目,发现前辈搭的框架通篇运用了异步编程方式,也就是async/await方式,作为一个刚接触的小白,自然不太明白其中原理,最重要的是,这个玩意如果不明白基 ...
- spring boot:接收数组参数及多文件混合json参数(spring boot 2.3.4)
一,生产环境中的复杂参数上传的场景 1,保存排序值 : 例如:某一件商品的多张展示图片排序,提交的排序值要和图片的id相对应 2,上传多张图片,图片要和指定的变量相对应 例如:在添加商品sku时, 需 ...
- selenium-滚动
移动到指定的坐标(相对当前的坐标移动) driver.execute_script("window.scrollBy(0, 700)"); 移动到窗口绝对位置坐标,如下移动到纵坐标 ...
- 第六章 Linux系统之文件管理
一.文件管理概述 1.对文件做些什么? 谈到Linux文件管理,首先我们需要了解的就是,我们要对文件做些什么事情? 其实无非就是对一个文件进行创建.复制.移动.查看.编辑.压缩.查找.删除等等 2.内 ...