Python Flask SQLAlchemy Pagination Python Flask SQLAlchemy Pagination flask flask

Python Flask SQLAlchemy Pagination


I recommend using Flask-SQLAlchemy's pagination: http://flask-sqlalchemy.pocoo.org/2.1/api/?highlight=pagination#flask.ext.sqlalchemy.Pagination

There's a well-written example here: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ix-pagination

Here's the basic idea for the view:

@app.route('/myview/<int:page>',methods=['GET'])def view(page=1):    per_page = 10    posts = Posts.query.order_by(Posts.time.desc()).paginate(page,per_page,error_out=False)    return render_template('view.html',posts=posts)

And then for the template (I don't know your posts model so I made something up):

<html>  <head>    Posts  </head>  <body>{% for post in posts.items %}<p>  {{ post.post_name }} post body: <b>{{ post.body }}</b></p>{% endfor %}{% if posts.has_prev %}<a href="{{ url_for('view', page=posts.prev_num) }}"><< Newer posts</a>{% else %}<< Newer posts{% endif %} | {% if posts.has_next %}<a href="{{ url_for('view', page=posts.next_num) }}">Older posts >></a>{% else %}Older posts >>{% endif %}  </body></html>


Controller

@app.route('/', methods=['GET'], defaults={"page": 1}) @app.route('/<int:page>', methods=['GET'])def index(page):    page = page    per_page = 2    users = User.query.paginate(page,per_page,error_out=False)    # print("Result......", users)    return render_template("index.html", users=users)

in the View

{% for user in users.items %}    <h1> {{ user.name }} </h1>{% endfor %}<nav aria-label="Page navigation example">                <ul class="pagination">                    {% if users.has_prev %}                      <li class="page-item"> <a class="page-link" href="{{ url_for('index', page=users.prev_num) }}">Previous</a></li>                    {% else %}                      <li class="page-item"><a class="page-link btn disabled" href="#">Previous</a></li>                    {% endif %}                    {% if users.has_next %}                      <li class="page-item"> <a class="page-link" href="{{ url_for('index', page=users.next_num) }}">Next</a></li>                    {% else %}                      <li class="page-item"><a class="page-link btn disabled" href="#">Next</a></li>                    {% endif %}                </ul>              </nav>