我是 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 %}
答案 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 %}