Flask / Jinja2动态WTF表单模板

时间:2018-02-26 17:17:49

标签: python jinja2 flask-wtforms

我正在尝试使用动态数量的输入字段创建jinaj2模板。

表单在Flask中成功生成,但是我遇到了Jinja / HTML的问题。

作为我"非动态"的一个例子。工作示例我有一个标准表单字段" forID"和四个硬编码字段形式字段+(字段编号)。

(640, 480, 3)

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

{{ form.csrf_token }}
{{ wtf.form_field(form.formID) }}

{{ wtf.form_field(form.field1) }}
{{ wtf.form_field(form.field2) }}
{{ wtf.form_field(form.field3) }} 
{{ wtf.form_field(form.field4) }}

我目前的myForm。

#<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>

2 个答案:

答案 0 :(得分:1)

' wtf.form_field(form.'+'i')'有一个奇数个撇号,这是一个语法问题

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

' wtf.form_field(form.' + i + ')'

这样你就得到了

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

wtf.form_field(form.your_field)

我同意@ DanielRoseman的评论。我可能会更像下面的问题(如果它适用于您的实现):

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

答案 1 :(得分:0)

我没有设法使用迭代上面讨论的字典的方法,虽然它可以工作但我同意它会更优雅。

但是,我有一个解决方法。在我的表单实例中生成HTML作为文本字符串,从模板开始并动态构建Jinja2部分无法在没有错误的情况下进行评估。我将这个HTML字符串传递给了渲染函数。

与此同时,我将联系Jinja2开发团队,了解如何在模板内完成。