一,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>&nbsp; &nbsp;打撒</p><p>&nbsp;</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">&larr;</span> 上一页</a></li>#}
77 {# {% if paginate.page ==1 %}#}
78 {# <li class="previous"><a href="#"><span aria-hidden="true">&larr;</span> 上一页</a></li>#}
79 {# {% else %}#}
80 {# <li class="previous"><a href="?page={{ paginate.prev_num }}"><span aria-hidden="true">&larr;</span> 上一页</a></li>#}
81 {# {% endif %}#}
82 {# {% if paginate.page >= paginate.pages %}#}
83 {# <li class="next"><a href=#">下一页 <span aria-hidden="true">&rarr;</span></a></li>#}
84 {# {% else %}#}
85 {# <li class="next"><a href="?page={{ paginate.next_num }}">下一页 <span aria-hidden="true">&rarr;</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">&laquo;</span>
98 </span>
99 </li>
100 {% else %}
101 <li class="active">
102 <span>
103 <span aria-hidden="true">&laquo;</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">&raquo;</span>
120 </span>
121 </li>
122 {% else %}
123 <li class="active">
124 <span>
125 <span aria-hidden="true">&raquo;</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分页的更多相关文章

  1. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  2. js实现前端分页页码管理

    用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...

  3. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  4. MVC如何使用开源分页插件shenniu.pager.js

    最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...

  5. NET Core-TagHelper实现分页标签

    这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...

  6. 套用JQuery EasyUI列表显示数据、分页、查询

    声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...

  7. php实现的分页类

    php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...

  8. C#关于分页显示

    ---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...

  9. JAVA 分页工具类及其使用

    Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...

随机推荐

  1. 应用启动失败,报错:The server experienced an unexpected error when processing the request

    前言 在腾讯云TKE集群中部署服务的时候,预警服务,warn一直重启,经过查询日志发现了如下的错误 The server experienced an unexpected error when pr ...

  2. devops-jenkins-Pipeline实战

    1) 配置gitlab的分支项目 点击红色标记的创建 project 项目 点击Create project创建Pipeline-demo项目 项目创建完成,然后我们创建一个Add README 然后 ...

  3. localhost与127.0.0.1与0.0.0.0

    localhost localhost其实是域名,一般系统默认将localhost指向127.0.0.1,但是localhost并不等于127.0.0.1,localhost指向的IP地址是可以配置的 ...

  4. boost之asio

    asio asio是C++的准标准网络库,并且C++20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>. ip地址 boost定义了表示ip ...

  5. Jmeter请求元件之参数化CSV

    1.设置CSV:线程组->配置元件->CSV 数据文件设置 2.在本地创建txt文件,一个测试用例参数是一行,参数之间用逗号分隔: 或者创建一个excel文档,保存格式为csv: 这里有个 ...

  6. 【C语言入门】"为什么这个又错了啊"来自编程初学者常见错误合辑!

    C语言的最大特点是:功能强,使用方便灵活. C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下"灵活的 余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其 ...

  7. 扫描仪扫描文件处理-Python批量处理

    多进程处理扫描出来的图片,参见: https://github.com/barrer/scan-helper bug问题反馈github提Issues

  8. linux wget指定下载目录和重命名

    当我们在使用wget命令下载文件时,通常会需要将文件下载到指定的目录,这时就可以使用 -P 参数来指定目录,如果指定的目录不存在,则会自动创建. 示例: p.p1 { margin: 0; font: ...

  9. 《Connecting the Dots: A Knowledgeable Path Generator for Commonsense Question Answering》一文的理解和总结

    构建常识问答知识路径生成器 论文贡献 ​ 提出学习一个多跳知识路径产生器来根据问题动态产生结构化证据.生成器以预先训练的语言模型为主干,利用语言模型中存储的大量非结构化知识来补充知识库的不完整性.路径 ...

  10. 通过命令行上传ipa到appstore

    搞持续集成自动化打包上传到appstore遇到这个问题,记录一下. 其实主要就一条到命令: xcrun altool --upload-app -f xxxx.ipa -u "yanqizh ...