flask 分页数据显示
填充一些数据在表中
@blue.route('/pages/') def pages(): # 默认进入这个视图函数 第一页并只显示5条数据 page = request.args.get('page',1,type=int) per_page = request.args.get('per_page',5,type=int) # 返回列表 如[1, 2, 3, 4] pagination = Pron.query.order_by(Pron.p_id.desc()).paginate(page,per_page) # Pron.p_id.desc() 或者 -Pron.p_id 是倒序排列 # 返回当前页的所有数据 persons = pagination.items
return render_template('per.html',pagination=pagination,persons=persons)
# per.html {% for person in persons %} id:{{ person.p_id }}<br> 字段:{{ person.p_str }}<br> 随机号码:{{ person.p_int }}<br><br> {% endfor %} <hr> <!--------------第一页---------------------> <a href="{{ url_for('base.pages') }}">第一页</a>
# 通过 has_prev 判断是否能上一页,不能则 url 为 #
{% if pagination.has_prev %} <a href="{{ url_for('base.pages') }}?page={{ pagination.prev_num }}">上一页</a> {% else %} <a href="#">上一页</a> {% endif %} <!--------------页码列表---------------------> {% for page in pagination.iter_pages() %} {% if page %} <!--------------当列表中的页码不等于 当前的页数 生成其他页码数(url)---------------------> {% if page != pagination.page %} <a href="{{ url_for('base.pages') }}?page={{ page }}">{{ page }}</a> {% else %} <a href="#">{{ page }}</a> {% endif %} {% endif %} {% endfor %}
# 通过 has_next 判断是否能上一页,不能则 url 为 #
{% if pagination.has_next %} <a href="{{ url_for('base.pages') }}?page={{ pagination.next_num }}">下一页</a> {% else %} <a href="#">上一页</a> {% endif %} <!--------------最后一页---------------------> <a href="{{ url_for('base.pages') }}?page={{ pagination.pages }}">最后一页</a> <hr> 当前页面 {{ pagination.page }} 总页数 {{ pagination.pages }} 总数据 {{ pagination.total }}
显示
其中一些方法的知识点
paginate.page 当前页数
paginate.pages 总页数
paginate.total 数据总条数
paginate.has_prev 是否存在上一页 是则返回trun
paginate.iter_pages() 所有页码 返回列表 如[1, 2, 3, 4] 可在html模板中迭代得到页码数
paginate(page, per_page,error_out).items 返回当前页的所有数据 在html中循环迭代得到其中数据 如下
{% for person in paginate.items %}
id:{{ person.p_id }}<br> 字段:{{ person.p_str }}<br> 随机号码:{{ person.p_int }}<br><br> {% endfor %}
简化视图函数和html模板
@blue.route('/pages/') def pages(): page = request.args.get('page',1,type=int) per_page = request.args.get('per_page',5,type=int) # 返回列表 如[1, 2, 3, 4] pagination = Pron.query.order_by(Pron.p_id.desc()).paginate(page,per_page) # Pron.p_id.desc() 或者 -Pron.p_id 是倒序排列 # 返回当前页的所有数据 persons = pagination.items # 不需要直接使用paginate在html模板中items循环 # return render_template('per.html',pagination=pagination,persons=persons) # 简化 在html页面中paginate.items 可以for循环迭代的到实例汇总的数据 return render_template('per.html', pagination=pagination)
{% for person in pagination.items %} id:{{ person.p_id }}<br> 字段:{{ person.p_str }}<br> 随机号码:{{ person.p_int }}<br><br> {% endfor %}