如何使用 Flask 保留 html 表单值?

How can I persist html form values using Flask?

我正在使用 Flask 并制作联系表。在用户提交表单后返回到同一视图时如何保留表单数据?我想我过去可以使用 WTForms 做到这一点,但是还有另一种方法吗? WTForms 似乎只是一个联系表就有些矫枉过正了。我尝试在第 29 行之后立即执行 form = request.form,然后将 form = form 作为 render_template() 中的变量传递。显然,没有用。如果这只能使用 WTForms,那么最简单的方法是什么?我认为为 html 元素显示编写宏太多了,而且会增加混乱。

 @app.route('/contact',methods=['GET','POST'])
 def contact():
     error = None
     if request.method == 'POST':
         if request.form['captcha'] == session["captcha"]:
             # Message(subject,sender,recipients_list)
             msg = Message(request.form['subject'],
                             sender=request.form['email'],
                             recipients=["email@gmail.com"])
             msg.body = request.form['message']
             flash('Message sent')
             mail.send(msg)
         else:
             flash('Invalid captcha')
     session["captcha"] = 'test'
     return render_template('contact.html',page_header='Contact')

contact.html:

 {% extends "base.html" %}
  {% block body %}

  <div class="row">
      <div class="col-md-10">
          {% with messages = get_flashed_messages() %}
              {% if messages %}
                  <ul class=flashes>
                  {% for message in messages %}
                      <li>{{ message }}</li>
                  {% endfor %}
                  </ul>
              {% endif %}
          {% endwith %}
          <form action="{{ url_for('contact') }}" method="POST">
              <div class="form-group">
                  <label for="email">Email</label>
                  <input type="email" class="form-control" id="email" name="email" placeholder="Your email address">
              </div>
              <div class="form-group">
                  <label for="subject">Subject</label>
                  <input type="text" class="form-control" id="subject" name="subject" placeholder="Subject">
              </div>
              <div class="form-group">
                  <label for="message">Message</label>
                  <textarea class="form-control" id="message" name="message" placeholder="Your message"></textarea>
              </div>
              <div class="form-group">
                  <label for="captcha">Captcha</label>
                  <input type="text" class="form-control" id="captcha" name="captcha">
              </div>
              <button type="submit" class="btn btn-primary pull-right">Submit<    /button>
          </form>
      </div>
  </div>
  <br>
  {% endblock %}

如果您不使用表单框架,则需要将各个数据项(主题、电子邮件、消息)作为单独的变量传递,并手动将它们填充到您的模板中 - 例如:

<input name="email" value="{{ email }}">

使用 request 全局变量:

<input name="email" value="{{request.form['email']}}"">