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; ...
随机推荐
- JS原生练习
1.输出1-10000之间的数 <script> for(i=1;i<=10000;i++) { document.write(i + "<br>") ...
- 学习WebDav
目录 前言 初识WebDav 有哪些支持webdav的网盘? WebDAV的特性和优势 服务端的搭建 调用WebDav接口 PROPFIND方法 PROPPATCH方法 MKCOL方法 PUT方法 G ...
- Python基础笔记1-Python读写yaml文件(使用PyYAML库)
最近在搭建自动化测试项目过程中经常遇到yaml文件的读写,为了方便后续使用,决定记下笔记. 一,YAML 简介 YAML,Yet Another Markup Language的简写,通常用来编写项目 ...
- 多路复用select和epoll的区别(转)
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一 ...
- C和C++区别——前置自增与后置自增
一.先看下面两段完全一样的代码块 /* test.cpp */ int main() { int a = 5; ++a = 7; printf("%d\n", a); return ...
- Django 中实现连接多个数据库并实现读写分离
读写分离 其基本原理就是让主数据库处理事务性增,改,删操作(INSERT,UPDATE,DELETE)操作,而从数据库处理SELECT查询操作,数据库复制被用来把事物性操作导致的变更同步到其他从数据库 ...
- snappy压缩/解压库
snappy snappy是由google开发的压缩/解压C++库,注重压缩速度,压缩后文件大小比其它算法大一些 snappy在64位x86并且是小端的cpu上性能最佳 在Intel(R) Core( ...
- elk-架构图
- ▶ 0001 No application 'E:\www\go\blog' found in your GOPATH
go mod 配置 beego 首先cmd bee new blog go mod init 然后复制到任意目录 bee run 就会报错, 要退出该目录,进入上级目录 bee run blog 才行
- Excel中外部数据链接无法删除的解决方法【转】
[摘要] 当Excel中公式引用了外部数据,每次打开时,总是自动弹出自动更新链接的对话框.如何找到这些链接?有没有办法实现断开原有链接,而保持数值不变? 有客户反应,当Excel无法链接到外部数据后, ...