簡體   English   中英

Python Flask SQLAlchemy 分頁

[英]Python Flask SQLAlchemy Pagination

我在使用 Flask-SQLAlchemy 或 Flask-Pagination 實現分頁時遇到問題,要么。 我不確定如何初始化分頁、設置頁面、確定頁面、offest 等。我來自 PHP,對 Python 很陌生。

我正在查詢數據庫中的所有帖子

posts = Posts.query.order_by(Posts.time.desc()).all()

我一直在查看以下示例:

我真的不知道該怎么做,我發現的信息在文章之間有很大的不同。 這讓我感到困惑,不知道從哪里開始。 我想查詢數據庫表的所有行,將結果限制為 20 並分頁。 我看不清楚。

我建議使用Flask-SQLAlchemy的分頁: http : //flask-sqlalchemy.pocoo.org/2.1/api/? highlight=pagination# flask.ext.sqlalchemy.Pagination

這里有一個寫得很好的例子: https : //blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ix-pagination

這是該視圖的基本思想:

@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)

然后是模板(我不知道您的帖子模型,所以我做了一些事情):

<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) }}">&lt;&lt; Newer posts</a>{% else %}&lt;&lt; Newer posts{% endif %} | 
{% if posts.has_next %}<a href="{{ url_for('view', page=posts.next_num) }}">Older posts &gt;&gt;</a>{% else %}Older posts &gt;&gt;{% endif %}

  </body>
</html>

我使用了 @user3186184 代碼,但出現了這個錯誤:

TypeError: 'Pagination' object is not iterable

但是當我將項目添加到這些代碼的末尾時:

users = User.query.paginate(page,per_page,error_out=False).items

我的問題已解決。

控制者

@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>

這是在燒瓶中添加分頁的最簡單答案

no_of_posts = 3
page = request.args.get("number")
    if page is None:
        page = 1
    else:
        page = int(page)
    allPosts = Posts.query.filter_by().all()
    length = len(allPosts)
    allPosts = allPosts[(page-1)*no_of_posts: page*no_of_posts]
    if page > 1:
        prev = page -1
    else:
        prev = None
    if page < math.ceil(length/no_of_posts):
        next = page + 1
    else:
        next = None

在模板中

{% if prev %}
<a href="?number={{ prev }}">&laquo; Previous</a>
{% endif %}
{% if next %}
<a href="?number={{ next }}">Next &raquo;</a>
{% endif %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM