这是表单类和页面的代码:
@bp.route('/questions/<int:page>', methods=('GET',))
def questions(page):
class Assessment(FlaskForm):
back = SubmitField("back")
next = SubmitField("next")
save = SubmitField("save")
submit = SubmitField("submit")
pageNumber = page
# some RadioFields here
question_form = Assessment()
return render_template('questions.html', questions=question_form)
这是html jinja代码:
{% if questions.pageNumber > 1 %}
{{ questions.back }}
{% endif %}
{% if 9 > questions.pageNumber %}
{{ questions.next }}
{% endif %}
该代码旨在阻止在第1页上创建后退按钮,在第9页(最后一页)上创建下一个按钮。
问题出现在这里:
@bp.route('/submit', methods=('GET', 'POST'))
def submit():
form = request.form
page = form["pageNumber"]
del form["pageNumber"]
# some unrelated code
if "back" in form:
return redirect(url_for('website.questions', page=page - 1))
elif "next" in form:
return redirect(url_for('website.questions', page=page + 1))
elif "save" in request.form:
return redirect(url_for('website.questions', page=page))
正如您所看到的,这个想法是传递页码,发生一些代码,然后根据用户按下的按钮将用户重定向到页面。
问题就在眼前
页码=表格[“页码”]
错误是
werkzeug.exceptions.badrequestkeyerror:400错误请求:浏览器(或代理)发送了此服务器无法理解的请求。keyerror:“页码”
看起来,由于用户没有给pagenumber赋值,所以它不会随表单一起传递。然而,这显然是有问题的,因为我需要页码来确定下一页应该发送到哪一页的问题。
非常感谢您的帮助。
编辑:表格:
<form method="post" action="/submit">
{% for question in questions %}
{% if question.type == "RadioField" %}
{{ question.label }}
<br>
{% for subfield in question %}
<tr>
<td>{{ subfield }}</td>
<td>{{ subfield.label }}</td>
</tr>
{% endfor %}
{% if not loop.last %}
<br><br>
{% endif %}
{% endif %}
{% endfor %}
{% if questions.pageNumber > 1 %}
{{ questions.back }}
{% endif %}
{% if 9 > questions.pageNumber %}
{{ questions.next }}
{% endif %}
{{ questions.save }}
{{ questions.submit }}
1条答案
按热度按时间jgzswidk1#
我猜你是从db那里得到问题的。如果是
flask-sqlalchemy
那么你应该考虑使用Pagination
函数,它消除了大部分代码。这是一个很好的例子。