WTForms render_field() 方法参考 for 循环变量
WTForms render_field() method reference for-loop variables
我正在使用 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
?
Is there a way to reference the for-loop variable category inside the render_field() method?
对:
{% for category in categories %}
{{render_field(category)}}
{% endfor %}
WTForms 使用 __getitem__
protocol to allow fields can be accessed like dictionary values,例如 form[fieldname]
。
因此,在您的代码中,将 form.category
替换为 form[category]
:
<form method="POST">
{% for category in categories %}
{{ render_field(form[category]) }}
{% endfor %}
</form>
我正在使用 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
?
Is there a way to reference the for-loop variable category inside the render_field() method?
对:
{% for category in categories %}
{{render_field(category)}}
{% endfor %}
WTForms 使用 __getitem__
protocol to allow fields can be accessed like dictionary values,例如 form[fieldname]
。
因此,在您的代码中,将 form.category
替换为 form[category]
:
<form method="POST">
{% for category in categories %}
{{ render_field(form[category]) }}
{% endfor %}
</form>