当前位置:   article > 正文

flask数据分页paginate的使用(flask学习)_flask paginate

flask paginate

Flask的数据分页示例

1,首先写数据获取的视图函数,就像这样:

  1. @app.route('/')
  2. @login_required
  3. def index():
  4. page=request.args.get('page',1,type=int)
  5. pagination=User.query.order_by(User.createTime.desc()).paginate(page,per_page=12,error_out=False)
  6. users=pagination.items
  7. return render_template('index.html', name=current_user.username,users=users,pagination=pagination)

数从请求的查询字符串(request.args)中获取,如果没有明确指定,则默认渲 染第一页。参数 type=int 保证参数无法转换成整数时,返回默认值。

为了显示某页中的记录,要把 all() 换成 Flask-SQLAlchemy 提供的 paginate() 方法。页 数是 paginate() 方法的第一个参数,也是唯一必需的参数。可选参数 per_page 用来指定 每页显示的记录数量;如果没有指定,则默认显示 20 个记录。另一个可选参数为 error_ out,当其设为 True 时(默认值),如果请求的页数超出了范围,则会返回 404 错误;如果 设为 False,页数超出范围时会返回一个空列表。

2,显示分页器:

paginate() 方法的返回值是一个 Pagination 类对象,这个类在 Flask-SQLAlchemy 中定义。 这个对象包含很多属性,用于在模板中生成分页链接,因此将其作为参数传入了模板。分页对象的属性简介如表所示。

对象方法:

接下来以 Jinja2 宏的形式实现的分页导航,

分页模板(_macros.html):

  1. {% macro pagination_widget(pagination, endpoint) %}
  2. <ul class="pagination">
  3. <li{% if not pagination.has_prev %} class="disabled"{% endif %}>
  4. <a href="{% if pagination.has_prev %}{{ url_for(endpoint,page = pagination.page - 1, **kwargs) }}
  5. {% else %}#{% endif %}">&laquo;
  6. </a>
  7. </li>
  8. {% for p in pagination.iter_pages() %}
  9. {% if p %}
  10. {% if p == pagination.page %}
  11. <li class="active">
  12. <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a>
  13. </li>
  14. {% else %}
  15. <li>
  16. <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a>
  17. </li>
  18. {% endif %}
  19. {% else %}
  20. <li class="disabled">
  21. <a href="#">&hellip;</a>
  22. </li>
  23. {% endif %}
  24. {% endfor %}
  25. <li{% if not pagination.has_next %} class="disabled"{% endif %}>
  26. <a href="{% if pagination.has_next %}{{ url_for(endpoint,page = pagination.page + 1, **kwargs) }}{% else %}#{% endif %}">&raquo;</a>
  27. </li>
  28. </ul>
  29. {% endmacro %}

然后就是在需要分页的地方引入此模板:

  1. {% import "_macros.html" as macros %}
  2. ..........其他代码省略...........
  3. {%if pagination%}
  4. <div class="pagination">
  5. {{ macros.pagination_widget(pagination, '.index') }}
  6. </div>
  7. {% endif %}

至于分页的css样式,自己写吧,怎么好看怎么写!

分页就是这么简单

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/686071
推荐阅读
相关标签
  

闽ICP备14008679号