J'ai du mal à implémenter la pagination avec Flask-SQLAlchemy ou Flask-Pagination, soit ou. Je ne sais pas comment initialiser la pagination, définir des pages, déterminer des pages, offest, etc. Je viens de PHP, assez nouveau pour Python.
Je recherche tous les articles de ma base de données
posts = Posts.query.order_by(Posts.time.desc()).all()
J'ai regardé les exemples suivants:
Je ne sais vraiment pas quoi faire, les informations que je trouve diffèrent considérablement d'un article à l'autre. Cela m'a laissé avec confusion et ne sachant pas par où commencer. Je souhaite interroger toutes les lignes de la table de base de données, limiter les résultats à 20 et paginer. Je ne vois pas cela clairement.
Je recommande d'utiliser la pagination de Flask-SQLAlchemy: http://flask-sqlalchemy.pocoo.org/2.1/api/?highlight=pagination#flask.ext.sqlalchemy.Pagination
Il y a un exemple bien écrit ici: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ix-pagination
Voici l'idée de base de la vue:
@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)
Et puis pour le modèle (je ne connais pas le modèle de vos posts donc j'ai inventé quelque chose):
<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>
@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)
{% 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>