标签:
在做网页的过程中,随着展示的数据增多,如果要在一页中显示全部内容,浏览速度会变慢且不符合实际需求。在 Web 浏览器中, 内容多的网页需要花费更多的时间生成、下载和渲染, 所以网页内容变多会降低用户体验的质量。这一问题的解决方法是分页显示数据,进行片段式渲染。在页面中渲染数据
<span style="font-size:18px;">app/main/views.py</span> @main.route('/userManage_admin', methods=['GET', 'POST']) @login_required def userManage_admin(): user0 = User.query.filter_by(email=current_user.email).first() <strong>page = request.args.get('page', 1, type=int)</strong> if user0.user_role > 0: <strong>pagination = User.query.filter_by(user_role=0).paginate(page, per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) usrs = pagination.items</strong> return render_template('userManage_admin.html', <strong>usrs=usrs,pagination=pagination</strong>) else: return redirect(url_for('.index'))
添加分页导航
paginate() 方法的返回值是一个 Pagination 类对象,这个类在 Flask-SQLAlchemy 中定义。这个对象包含很多属性, 用于在模板中生成分页链接,因此将其作为参数传入了模板。
分页对象的属性简介
在Flask-SQLAlchemy对象上可调用的方法
拥有这么强大的对象和 Bootstrap 中的分页 CSS 类,我们很轻易地就能在模板底部构建一个分页导航。
如下是以 Jinja2 宏的形式实现的分页导航。
<span style="font-size:18px;">app/templates/_macros.html:分页模板宏 </span>{% macro pagination_widget(pagination, endpoint) %} <ul class="pagination"> <li{% if not pagination.has_prev %} class="disabled"{% endif %}> <a href="{% if pagination.has_prev %}{{ url_for(endpoint, page=pagination.prev_num, **kwargs) }}{% else %}#{% endif %}"> « </a> </li> {% for p in pagination.iter_pages() %} {% if p %} {% if p == pagination.page %} <li class="active"> <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a> </li> {% else %} <li> <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a> </li> {% endif %} {% else %} <li class="disabled"><a href="#">…</a></li> {% endif %} {% endfor %} <li{% if not pagination.has_next %} class="disabled"{% endif %}> <a href="{% if pagination.has_next %}{{ url_for(endpoint, page=pagination.next_num, **kwargs) }}{% else %}#{% endif %}"> » </a> </li> </ul> {% endmacro %}
? 分页对象的 iter_pages() 迭代器返回的所有页面链接。这些页面被渲染成具有明确页数的链接,页数在 url_for() 的参数中指定。当前显示的页面使用 activeCSS 类高亮显示。页数列表中的间隔使用省略号表示。
? “下一页”链接。如果当前页是最后一页,则会禁用这个链接。
Jinja2 宏的参数列表中不用加入 **kwargs 即可接收关键字参数。分页宏把接收到的所有关键字参数都传给了生成分页链接的 url_for() 方法。这种方式也可在路由中使用,例如包含一个动态部分的资料页。
pagination_widget 宏可放在其他一些模板的后面。
<span style="font-size:18px;">app/templates/useManage_admin.html <span style="font-size:18px;">在学生信息列表下面添加分页导航</span></span> {% extends "base.html" %} {% import "bootstrap/wtf.html" as wtf %} {% import "_macros.html" as macros %} {% block main %} {{ super() }} <div class="main"> .....................中间省略要显示的内容 {% if pagination %} {{ macros.pagination_widget(pagination, '.sm_admin') }} {% endif %} </div> {% endblock %}
标签:
原文地址:http://blog.csdn.net/ying847782627/article/details/51329245