【发布时间】:2019-04-21 01:10:00
【问题描述】:
我正在尝试将会话变量传递到 WTForm。我使用变量来选择 RadioField 条目。
我尝试将其作为常规变量传递,但 WTForm 无法识别该变量。我尝试了不同的论点,但它仍然无法在 WTForms 中识别它。这是我要传递的变量级别。我知道如果我在 ZWOForm(Form) 类的第一行写 level = 1(或 2 或 3),这一切都有效:我错过了什么?
来自 init.py:
class ZWOForm(Form):
zwotitle = TextField('Title', [validators.Length(min=3, max=50)])
zwotags = TextField('Tags', [validators.Length(min=3, max=50)])
category = TextField('Category (Your Choice)', [validators.Length(min=3, max=50)])
if level <3:
if level <2:
zwolevel = RadioField('Viewing Level', choices=[('1','Public')], default=1)
else:
zwolevel = RadioField('Viewing Level', choices=[('1','Public'),('2','Private')], default=1)
else:
zwolevel = RadioField('Viewing Level', choices=[('1','Public'),('2','Private'),('3','Team')], default=1)
zwodescription = TextAreaField('Description', [validators.Length(min=3, max=200)])
@app.route('/createzwo/', methods=["GET","POST"])
@login_required
def create_zwo():
try:
level = session['level']
form = ZWOForm(request.form)
if request.method == "POST" and form.validate():
...
return render_template("createzwo.html", form=form)
来自 HTML 表单:
{% from "_formhelpers.html" import render_field %}
<form method=post action="/createzwo/">
<dl>
{{render_field(form.zwotitle)}}
{{render_field(form.zwotags)}}
{{render_field(form.category)}}
{{render_field(form.zwolevel)}}
{{render_field(form.zwodescription)}}
</dl>
<p><input type=submit value="Create ZWO File"></p>
</form>
来自 _formhelpers.html:
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
我看到的错误是“级别”未定义,渲染错误会导致我们的一堆行指向其他 .py 文件(本地和全局)。
【问题讨论】: