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

时间:2015-02-26 18:05:31

标签: python html 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 %}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

使用 request 全局变量:

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