在jinja'嵌套'if'语句'for循环

时间:2017-05-30 09:15:45

标签: python html for-loop if-statement jinja2

我正试图在循环中潜入jinja模板的if语句:

</table>
<class="container">
<table border ="1">
<caption> BBOXX <caption>
<thead class="thead-inverse">
    <tr>
        <th>CU Serial</th>
        <th>System</th>
        <th>Version</th>
        <th>Enable Status</th>
    </tr>
        {% for d in client_data %}
        <tr>
            <td>{{ d["serial_number"]}} </td>
            <td>{{ d["hardware_type"]}} </td>
                {% if {{ d["current_enable_flag"]}} == TRUE %}
                    <td> {{ON}} </td>
                {% else %}
                    <td> {{OFF}} </td>
                {% endif %}
        </tr>
        {% endfor %}
</table>

错误为TemplateSyntaxError: expected token ':', got '}'

:应该在哪里?

1 个答案:

答案 0 :(得分:2)

您的if语法错误。您无需使用{{ ... }}插入变量,该变量仅用于插入模板输出中的值。

使用

{% if d["current_enable_flag"] == TRUE %}
    <td> {{ON}} </td>
{% else %}
    <td> {{OFF}} </td>
{% endif %}

如果d["current_enable_flag"]是Python布尔值,则可以完全删除== TRUE部分。

演示:

>>> from jinja2 import Template
>>> template = Template('''\
... {% for d in client_data %}
... <tr>
...     <td>{{ d["serial_number"]}} </td>
...     <td>{{ d["hardware_type"]}} </td>
...     {% if d["current_enable_flag"] %}
...         <td> {{ON}} </td>
...     {% else %}
...         <td> {{OFF}} </td>
...     {% endif %}
... </tr>
... {% endfor %}
... ''')
>>> html_rendered = template.render(client_data=[
...     {'serial_number': 42, 'hardware_type': 'foo', 'current_enable_flag': True},
...     {'serial_number': 81, 'hardware_type': 'bar', 'current_enable_flag': False}
... ], ON='ON', OFF='OFF')
>>> print(html_rendered)

<tr>
    <td>42 </td>
    <td>foo </td>

        <td> ON </td>

</tr>

<tr>
    <td>81 </td>
    <td>bar </td>

        <td> OFF </td>

</tr>