为什么 Flask-SQLAlchemy 对象仅在我使用分页时才呈现? (Jinja2)

时间:2021-03-16 14:56:42

标签: python flask pagination jinja2 flask-sqlalchemy

我是 Web 开发的新手,无法弄清楚为什么我的 SQLite 数据库中的数据没有被呈现,除非我包含导致它被分页的代码行。

无分页代码:

@tools.route("/toolkit/feedback/user/<string:username>", methods=['GET', 'POST'])
@login_required
def feedback(username):
    user = User.query.filter_by(username=username).first_or_404()
    feedback = Feedback.query.filter_by(author=user).all()
    return render_template("comments.html", feedback=feedback, user=user)

分页代码:

@tools.route("/toolkit/feedback/user/<string:username>", methods=['GET', 'POST'])
@login_required
def feedback(username):
    page = request.args.get('page', 1, type=int)
    user = User.query.filter_by(username=username).first_or_404()
    feedback = Feedback.query.filter_by(author=user)\
            .paginate(page=page, per_page=10)
    return render_template("comments.html", feedback=feedback, user=user)

HTML/Jinja2:

{% extends 'layout.html' %}
{% block content %}
<ul class="list-group list-group-flush">
    {% for teacher_feedback in feedback.items %}
    <li class="list-group-item">{{ teacher_feedback.comment }}</li>
  {% endfor %}
</ul>


    {% for page_num in feedback.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
    {% if page_num %}
      {% if feedback.page == page_num %}
        <a class="btn btn-info mb-4" href="{{ url_for('tools.feedback', username=user.username, page=page_num) }}">{{ page_num }}</a>
      {% else %}
        <a class="btn btn-outline-info mb-4" href="{{ url_for('tools.feedback', username=user.username, page=page_num) }}">{{ page_num }}</a>
      {% endif %}
    {% else %}
      ...
    {% endif %}
  {% endfor %}
{% endblock content %}

1 个答案:

答案 0 :(得分:1)

paginate 函数返回具有 Pagination 方法的 iter_pages object。标准 SQLAlchemy 查询没有此方法,这就是为什么当您尝试在模板中迭代 feedback 时看不到任何内容的原因。

由于这一行 feedback = Feedback.query.filter_by(author=user).all() 为您提供了一个 list,因此您可以在 HTML 中为您提供非分页方法作为测试:

{% for f in feedback %}
    <p>{{f.AN_ATTRIBUTE_OF_FEEDBACK}}</p>
{% endfor %}
相关问题