Python 烧瓶/Jinja2动态WTF表格模板

Python 烧瓶/Jinja2动态WTF表格模板,python,jinja2,flask-wtforms,Python,Jinja2,Flask Wtforms,我正在尝试创建一个具有动态输入字段数的jinaj2模板 表单正在Flask中成功生成,但是我对Jinja/HTML有问题 作为“非动态”工作示例的一个示例,我有一个标准表单字段“forID”和四个硬编码字段表单field+(字段编号) 我可以使用什么方法使Jinja/HTML动态化。我尝试过EVAL和EVEC,但这些Python命令在Jinja中不受支持 #<form method="POST" action = "{{url_for('myHtmlTemplate')}}"> {

我正在尝试创建一个具有动态输入字段数的jinaj2模板

表单正在Flask中成功生成,但是我对Jinja/HTML有问题

作为“非动态”工作示例的一个示例,我有一个标准表单字段“forID”和四个硬编码字段表单field+(字段编号)

我可以使用什么方法使Jinja/HTML动态化。我尝试过EVAL和EVEC,但这些Python命令在Jinja中不受支持

#<form method="POST" action = "{{url_for('myHtmlTemplate')}}">
{{ form.csrf_token }}
{{ wtf.form_field(form.formID) }}

{% for i in form.myDynamicFields.keys() %}:
     {{ eval(' wtf.form_field(form.'+'i')') }}
{% endfor %}    

<input class="btn btn-success" type="submit" value="Submit">
#</form>
“wtf.form_字段(form.+'i')”
有奇数个撇号,这是一个语法问题

我猜你想要更接近的东西:

' wtf.form_field(form.' + i + ')'
这样你就可以

i = 'your_field'
print(' wtf.form_field(form.' + i + ')')

wtf.form_field(form.your_field)

我同意@DanielRoseman的评论。我可能会更像下面这样处理这个问题(如果它与您的实现一起工作的话):


我没有设法使用上面讨论的迭代字典的方法,尽管如果它可以工作,我同意它会更加优雅

不过,我还有一个工作要做。在我的表单实例中,以文本字符串的形式生成HTML,从模板开始,动态构建Jinja2节,这是不可能没有错误的。我将这个HTML字符串从类传递到render函数中


与此同时,我将与Jinja2开发团队联系,看看如何在模板本身中完成这项工作。

您应该显示生成表单的代码。什么是
表单.myDynamicFields
?如果是字典,为什么不能将值直接传递给form_field方法?@DanielRoseman感谢您的及时回复。“form”是myform的一个实例,我正在与Jinja一起努力输入form(字典中的值)。在其他语言中,我会使用动态字段名,但我也认为这在Jinja中不可用。
' wtf.form_field(form.' + i + ')'
i = 'your_field'
print(' wtf.form_field(form.' + i + ')')

wtf.form_field(form.your_field)
{% for field in form.myDynamicFields %}:
     {{ wtf.form_field(field) }}
{% endfor %}