Flask/Jinja2动态WTF形式温度

2024-06-28 19:14:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

{{ 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) }}

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

^{pr2}$

我现在的状态。在

class myform(FlaskForm):
connection = removed
result = connection.execute("SELECT * FROM sqltable")
result = result.fetchall()

scenarioList = []
fieldList = []
fieldLabel = []

for scen in result:
scenarioList.append("Scenario: " + scen[0])
fieldList.append("field: " + scen[0])

for i in range(len(result)):
fieldLabel.append("My Field" + str(i + 1))

myDynamicFields = dict(zip(fieldLabel, fieldList))
formID = StringField('Form ID')

for key, val in myDynamicFields.items():
exec(key + '=StringField(val)')

Tags: inform示例fieldforhtml动态result
2条回答

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

我猜你想要更接近:

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

这样你就可以

^{pr2}$

我确实同意@DanielRoseman的评论。我可能会更像以下方法来解决这个问题(如果它能与您的实现一起工作):

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

我没有设法使用重复上述字典的方法,虽然如果它可以工作,我同意它将更加优雅。在

不过,我还有工作要做。在我的表单实例中将HTML作为文本字符串生成,从模板开始并动态构建Jinja2部分,无法毫无错误地进行计算。我将这个HTML字符串从类传递到render函数中。在

同时,我将与Jinja2开发团队联系,看看如何在模板本身中实现它。在

相关问题 更多 >