flask-如何将数字作为表单的一部分传递,而不将其作为html的一部分打印?

lo8azlld  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(299)

这是表单类和页面的代码:

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

jgzswidk1#

我猜你是从db那里得到问题的。如果是 flask-sqlalchemy 那么你应该考虑使用 Pagination 函数,它消除了大部分代码。这是一个很好的例子。

相关问题