我在使用flask jinja2模板中的多个列表迭代for loop
时遇到了问题。
我的代码如下所示
Type = 'RS'
IDs = ['1001','1002']
msgs = ['Success','Success']
rcs = ['0','1']
return render_template('form_result.html',type=type,IDs=IDs,msgs=msgs,rcs=rcs)
到目前为止,我不确定是否提供了正确的模板,
<html>
<head>
<title>Response</title>
</head>
<body>
<h1>Type - {{Type}}!</h1>
{% for reqID,msg,rc in reqIDs,msgs,rcs %}
<h1>ID - {{ID}}</h1>
{% if rc %}
<h1>Status - {{msg}}!</h1>
{% else %}
<h1> Failed </h1>
{% endif %}
{% endfor %}
</body>
</html>
我试图得到的输出类似于下面的html页面
Type - RS
ID - 1001
Status - Failed
ID - 1002
Status - Success
答案 0 :(得分:23)
您需要zip()
,但未在jinja2模板中定义。
一个解决方案是在调用 render_template
函数之前将其拉,例如:
查看功能:
return render_template('form_result.html',type=type,reqIDs_msgs_rcs=zip(IDs,msgs,rcs))
模板:
{% for reqID,msg,rc in reqIDs_msgs_rcs %}
<h1>ID - {{ID}}</h1>
{% if rc %}
<h1>Status - {{msg}}!</h1>
{% else %}
<h1> Failed </h1>
{% endif %}
{% endfor %}
另外,您可以使用Flask.add_template_x
函数(或Flask.template_x
装饰器)将zip
添加到jinja2模板全局
@app.template_global(name='zip')
def _zip(*args, **kwargs): #to not overwrite builtin zip in globals
return __builtins__.zip(*args, **kwargs)
答案 1 :(得分:1)
如果您只使用一次并且不想污染全局命名空间,您也可以将zip
作为模板变量传递。
return render_template('form_result.html', ..., zip=zip)