我正在使用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 %}
答案 0 :(得分:0)
如果您没有使用表单框架,则需要将各个数据项(主题,电子邮件,消息)作为单独的变量传递,并在模板中手动填充它们 - 例如:
<input name="email" value="{{ email }}">
答案 1 :(得分:0)
使用 request
全局变量:
<input name="email" value="{{request.form['email']}}"">