Flask - Jinja2如何输出不同的<div id =“”class =“”> </div>

时间:2014-02-20 19:36:19

标签: python flask jinja2

所以我将数据输出到我的模板,如下所示(该函数将检查每个数据(一个int)是否为我的计算产生True / False的结果,然后产生正在计算的项目。

@app.route('/', methods=['POST'])
# doing something here
def get_data():
    for item in generate_list():
        if isResult(item):
            yield True
        else:
            yield False
        yield item
return Response(stream_template('result.html', data=get_data())) 

在HTML文件中我有:

<div id="resultfield">
{% for state, id in data: %}
        {% if state == True %}
         <div class='passed'>{{ id }}:{{ state }}</div>
        {% else %}
        <div class='failed'>{{ id }}:{{ state }}</div>
{% endfor %}
</div>

我的目的是,如果状态为True,那么结果(如CSS中所述)将显示为绿色,否则为灰色。

以某种方式代码不起作用,因为它说“TypeError:'bool'对象不可迭代”。

我怎么能解决这个问题,因为我是对flask和jinja2的新手?

非常感谢

1 个答案:

答案 0 :(得分:4)

你需要产生元组,而不是产生布尔值,然后单独的项目:

def get_data():
    for item in generate_list():
        yield isResult(item), item

由于isResult()已经返回布尔值,因此此处无需进行if / else测试。

您可以将模板简化为:

<div id="resultfield">
{% for state, id in data %}
     <div class="{% if state %}passed{% else %}failed{% endif %}">{{ id }}:{{ state }}</div>
{% endfor %}
</div>