Paginate a query

Paginate with Flask-SQLAlchemy and keep page numbers safe.

Open in playground
flask-sqlalchemy-pagination.py
from flask import request, render_template


@bp.get("/posts")
def posts():
    page = max(request.args.get("page", 1, type=int), 1)
    pager = Post.query.order_by(Post.created_at.desc()).paginate(
        page=page, per_page=20, error_out=False)
    return render_template("posts.html", posts=pager.items, pager=pager)

# template:
# {% if pager.has_prev %}<a href="{{ url_for('main.posts', page=pager.prev_num) }}">Previous</a>{% endif %}
# {% if pager.has_next %}<a href="{{ url_for('main.posts', page=pager.next_num) }}">Next</a>{% endif %}