一,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. pycharm里面同级目录的py文件引用报错

    使用pycharm开发py遇到很烦的事儿,就是在同级目录引用另外一个py文件,pycharm里面总是会红杠,代码还是 照样可以跑,只是看着烦. 查询了一下,通过将当前目录设置为sources_root ...

  2. ORA-00017: session requested to set trace event 请求会话以设置跟踪事件

    ORA-00017: session requested to set trace event   ORA-00017: 请求会话以设置跟踪事件 Cause:       The current se ...

  3. 【开源】Springboot API 一键生成器

    Springboot API 一键生成器 写这个项目,最大的想法就是:不做CRUD 程序猿 Springboot 在我们平时开发项目当中,是如此的常用.然而,比如平时我们写的一些: XX 管理系统 X ...

  4. 网站搭建-云服务器是什么-云服务器ECS是什么

    学习上瘾了,本博客关闭,后期再总结整理.

  5. 3.字符设备led驱动

    1.硬件原理图 由图可知,led1,led2,led3,led4,分别对应GPB5,GPB6,GPB7,GPB8,由s3c2440芯片手册可得到如下图所示,分别配置GPBCON和GPBDAT即可 2. ...

  6. 多测师讲解接口测试 _fiddler无法打开浏览器_高级讲师肖sir

    错误现象: 打开fi'd'dler以后浏览器无法打开,关闭fiddler之后可以打开浏览器 解决方案: 1. 2. 在点击确定

  7. 试用 Azure Sql 数据库

    我们的12月试用账号的免费服务里有一个Azure Sql服务,最近正好自己做一个小工具需要一个数据库,正好可以把它当测试库顺便体验一把Azure Sql. 概述 Azure SQL 数据库 Azure ...

  8. 多Y轴图的尝试

    最近的一篇文章中需要绘制多Y轴图形,Excel只能做双Y轴图,又尝试了Origin,SigmaPlot,Igor等软件,手动做起来相当繁琐,批量做更是觉得费劲,干脆尝试在MeteoInfoLab里实现 ...

  9. 基于python实现链式栈

    """ 链式栈 linkstack.py 思路分析: 1.源于链表结构 2.封装栈的操作方法(入栈,出栈,栈空,栈顶) 3.链表的开头作为栈顶(不用每次遍历,效率高,怎样 ...

  10. oh my zsh 安装

    date: "2020-10-18T12:36:00+08:00" title: "oh my zsh 安装" tags: ["zsh",& ...