Pagination
Exemple de route de pagination avec flask-sqlalchemy Paginate
Dans cet exemple, nous utilisons un paramètre dans la route pour spécifier le numéro de page. Nous définissons une valeur par défaut de 1 dans le paramètre de fonction page=1
. Nous avons un objet User
dans la base de données et nous l’interrogeons, en triant par ordre décroissant, en affichant les derniers utilisateurs en premier. Nous utilisons ensuite la méthode [paginate
][1] de l’objet query
dans flask-sqlalchemy. Nous passons ensuite ceci à render_template
pour être rendu.
@app.route('/users')
@app.route('/users/page/<int:page>')
def all_users(page=1):
try:
users_list = User.query.order_by(
User.id.desc()
).paginate(page, per_page=USERS_PER_PAGE)
except OperationalError:
flash("No users in the database.")
users_list = None
return render_template(
'users.html',
users_list=users_list,
form=form
)
[1] : http://flask-sqlalchemy.pocoo.org/2.1/api/#flask.ext.sqlalchemy.BaseQuery.paginate
Rendu de la pagination dans Jinja
Ici, nous utilisons l’objet que nous avons passé à render_template
pour afficher les pages, la page active actuelle, ainsi que les boutons précédent et suivant si vous pouvez accéder à la page précédente/suivante.
<!-- previous page -->
{% if users_list.has_prev %}
<li>
<a href="{{ url_for('users', page=users_list.prev_num) }}">Previous</a>
</li>
{% endif %}
<!-- all page numbers -->
{% for page_num in users_list.iter_pages() %}
{% if page_num %}
{% if page_num != users_list.page %}
<li>
<a href="{{ url_for('users', page=page_num) }}">{{ page_num }}</a>
</li>
{% else %}
<li class="active">
<a href="#">{{ page_num }}</a>
</li>
{% endif %}
{% else %}
<li>
<span class="ellipsis" style="white-space; nowrap; overflow: hidden; text-overflow: ellipsis">…</span>
</li>
{% endif %}
{% endfor %}
<!-- next page -->
{% if users_list.has_next %}
<li>
<a href="{{ url_for('users', page=users_list.next_num) }}">Next</a></li>
{% endif %}
{% endif %}