我正在使用Flask创建一个Web应用程序。我正在尝试通过遍历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.category
中尝试引用form.html
时,通过Flask调试器给出了以下错误:
jinja2.exceptions.UndefinedError: '__main__.EvaluateCaseForm object' has no attribute 'category'
我已经查看了官方文档here,但找不到答案。我也尝试引用{{render_field({{ form.category }})}}
,{{render_field(form.{{category}})}}
和{{render_field({% form.category %})}}
是否可以在category
方法内引用for循环变量render_field()
?
答案 0 :(得分:1)
WTForms使用__getitem__
协议来允许像dictionary values这样的字段可以访问,例如form[fieldname]
。
因此,在您的代码中,将form.category
替换为form[category]
:
<form method="POST">
{% for category in categories %}
{{ render_field(form[category]) }}
{% endfor %}
</form>
答案 1 :(得分:0)
是否可以在render_field()方法中引用for循环变量类别?
是的
array.get