我正在尝试实现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
结果:
正如您所看到的,pagination.info正确显示了记录数,但它仍显示每条记录,尽管per_page变量设置为1。
答案 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()
(这只是一个例子,没有保证它会起作用)