【发布时间】:2018-08-03 23:17:41
【问题描述】:
我正在使用 Flask 创建一个网络应用程序。我正在尝试通过遍历render_template() 方法中传递的列表来使用 Flask-WTForms 创建一个表单。但是,我无法在模板内的 for 循环中引用该变量。
查看
class FormExample(Form):
category1 = StringField("Category 1")
category2 = StringField("Category 2")
categories = ['category1', 'category2']
def form():
form = FormExample(request.form)
return_template("form.html", categories=categories, form=form)
_formhelpers.html(建议在docs下使用)
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
{% for error in field.errors %}
{{ error }}
{% endfor %}
{% endif %}
</dd>
{% endmacro %}
模板(form.html)
<form method="POST">
{% for category in categories %}
{{render_field(form.category)}}
{% endfor %}
</form>
当尝试在 form.html 中引用 form.category 时,我通过 Flask 调试器收到以下错误:
jinja2.exceptions.UndefinedError: '__main__.EvaluateCaseForm object' has no attribute 'category'
我已经查看了官方文档here 并找不到答案。我也尝试过引用{{render_field({{ form.category }})}}、{{render_field(form.{{category}})}} 和{{render_field({% form.category %})}}
有没有办法在render_field()方法中引用for循环变量category?
【问题讨论】:
-
为什么不
{% for field in form %}{{ render_field(field) }}{% endfor %}?您是否正在尝试处理与表单中的字段不匹配的categories? -
@snakecharmerb 我遇到的问题是
form.category被读取,好像变量form有一个名为category的属性。但是,我希望category的值是基于 for 循环的值。这有意义吗?
标签: python validation flask jinja2 wtforms