0
点赞
收藏
分享

微信扫一扫

SQLAlchemy()分页器paginate方法

Flask的数据分页示例

 

用法:

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

# 首页
@blog_bp.route('/', endpoint='index')
def index():
#获取页数
page = request.args.get('page',1)
paginate = Article.query.paginate(page=int(page),per_page=3)

# articles = Article.query.all()
# uname = request.cookies.get('uname')
# print(uname)
uname = session.get('uname')
return render_template('index.html', paginate=paginate, uname=uname)

 

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

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

2,显示分页器:

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

    #paginate 属性:
    # print(paginate.pages) #总共能生成多少页
    # print(paginate.page) #当前页码数
    # print(paginate.has_next) #True
    # print(paginate.has_prev) #Flase
    # print(paginate.next_num) #获取下一页的页码数
    # print(paginate.prev_num) #获取上一页的页码数
    # print(paginate.items) #获当前页的对象 列表

SQLAlchemy()分页器paginate方法_分页

对象方法:

SQLAlchemy()分页器paginate方法_分页_02

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

分页模板运用的bootstrap的分页视图(index.html):

<nav aria-label="Page navigation">
<ul class="pagination">
<li {% if not paginate.has_prev %} class="disabled"{% endif %}>
<a href="{{url_for('blog.index')}}?page={{paginate.prev_num}}" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{% for num in range(1,paginate.pages+1) %}

<li {% if num == paginate.page %} class="active"{% endif %}><a href="{{url_for('blog.index')}}?page={{num}}">{{num}}</a></li>
{% endfor %}
<li {% if not paginate.has_next %} class="disabled"{% endif %}>
<a href="{{url_for('blog.index')}}?page={{paginate.next_num}}" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>

效果:

SQLAlchemy()分页器paginate方法_html_03


举报

相关推荐

0 条评论