1
我有这个小Flask程序。它期望用户的姓名和年龄,然后打印一条消息。真的很容易,因为我刚刚开始使用Python和Flask。如何从使用WTForm构建的表单中清空数值
from flask import Flask, render_template
from flask.ext.bootstrap import Bootstrap
from flask.ext.wtf import Form
from wtforms import StringField, IntegerField, SubmitField
from wtforms.validators import Required, Length, NumberRange
app = Flask(__name__)
app.config['SECRET_KEY'] = 'top secret!'
bootstrap = Bootstrap(app)
class NameForm(Form):
name = StringField('What is your name?', validators = [Required(), Length(1, 16)])
age = IntegerField('How old are you?', validators = [Required(), NumberRange(min=1, max=99, message="Should be between 1 and 99")])
submit = SubmitField('Submit')
@app.route('/', methods=['GET', 'POST'])
def index():
name = None
age = None
form = NameForm()
if form.validate_on_submit():
name = form.name.data
age = form.age.data
form.age.raw_data = None
form.name.data = ''
return render_template('index.html', form = form, name = name, age = age)
if __name__ == '__main__':
app.run(debug = True)
而且,对于HTML模板,我有: {%伸出 “引导/ base.html文件” %}
{% block title %}Form Example{% endblock %}
{% block navbar %}
<nav class="navbar navbar-inverse" role="navigation">
<div class="container">
<a href="{{ url_for('index') }}" class="navbar-brand">Hello</a>
</div>
</nav>
{% endblock %}
{% block content %}
<div class="container">
<form method="POST" action="">
{{ form.name.label }} {{ form.name(size=16, class='name-field') }}
{% for error in form.name.errors %}
{{ error }}
{% endfor %}
<br>
{{ form.age.label }} {{ form.age(class='age-field') }}
{% for error in form.age.errors %}
{{ error }}
{% endfor %}
<br />
{{ form.submit() }}
{{ form.hidden_tag() }}
</form>
{% if name %}
<h1>Hello, {{ name.capitalize() }}</h1>
<h2>You're {{ age }} years old.</h2>
{% endif %}
</div>
{% endblock %}
我的问题是,我提交表单后,输入名称是空的,但年龄输入不是。为什么?我怎样才能清空数字字段?
谢谢。
您的回答确实解决了问题,因此我接受了这个答案。但是,既然我们在这里,为什么我以前的代码擦除了NAME,但不会擦除AGE字段?我认为,因为name属性是一个字符串,而age是一个整数,所以可以用''清空一个字符串,并且数值应该以不同的方式清空。它有任何意义吗? – 2014-11-06 00:59:23
它难倒了我一段时间,看起来像'raw_data'是一个列表。指定'form.age.raw_data = ['']'可以得到你需要的结果。它确实觉得应该有更直接的方式! – Doobeh 2014-11-06 03:19:02