迭代python中的多个列表 - flask - jinja2模板

时间:2014-01-23 10:57:00

标签: python flask jinja2

我在使用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

2 个答案:

答案 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)