Flask-paginate显示太多结果

时间:2017-04-28 11:54:07

标签: python flask pagination flask-sqlalchemy

我正在尝试实现flask-paginate以返回每页的特定数量的resuts。我跟着docs,它仍然显示所有记录。我还在github检查了例子,但是看不出我做错了什么。我在python中的def:

{% extends "header.html" %}
{% block body %}

<table border=2 padding=10>
   <tr padding="10">
      <td>Username</td>
      <td>Filename</td>
   </tr>
{% for file in files %}
  <tr padding=10>
     <td padding=10> {{ file.username }} </td>
     <td padding=10> {{ file.title }} </td>
     <td><a href="{{ url_for('static', filename=file.file) }}">Download</a></td>
  </tr>
{% endfor %}
</table>

{{ pagination.info }}
{{ pagination.links }}

{% endblock %}

和html模板:

let canPlayReverse = playViewController.player!.currentItem!.canPlayReverse

结果:

enter image description here

正如您所看到的,pagination.info正确显示了记录数,但它仍显示每条记录,尽管per_page变量设置为1。

2 个答案:

答案 0 :(得分:2)

扩展VKolev的答案,您需要一个偏移量变量并将per_page和offset应用于查询。实际上,built-in可以同时设置页面,per_page和偏移量,您可以使用from flask_paginate import get_page_args导入。但是,在您的示例中,由于您需要的值与默认值不同,因此手动操作也很容易。以下是完整的view.py代码:

from flask_paginate import Pagination, get_page_args

@search.route('/dashboard')
def dashboard():
    page = int(request.args.get('page', 1))
    per_page = 1
    offset = (page - 1) * per_page

    files = File.query.order_by(File.title)
    files_for_render = files.limit(per_page).offset(offset)

    search = False

    q = request.args.get('q')
    if q:
        search = True

    pagination = Pagination(page=page, per_page=per_page, offset=offset,
                           total=files.count(), css_framework='bootstrap3', 
                           search=search)

    return render_template('dashboard.html', files=files_for_render, pagination=pagination)

答案 1 :(得分:0)

或者,如果您使用的是Flask-SQLAlchemy,则已经存在分页。只需在try: <code to execute> except (<list of errors>) as e: print e 之后添加.pagination()即可。有关详细信息,请查看documentation

Flask-Paginate只渲染分页,实际的分页是在select中完成的。所以你应该手动限制和偏移

order_by()

(这只是一个例子,没有保证它会起作用)