I am trying to sneak in an ifstatement within a loop for a jinja template:
CU SerialSystemVersionEnable Status
{% for d in client_data %}{{ d["serial_number"]}} {{ d["hardware_type"]}}
{% if {{ d["current_enable_flag"]}} == TRUE %} {{ON}}
{% else %} {{OFF}}
{% endif %}
{% endfor %}
the error is TemplateSyntaxError: expected token ':', got '}'
Where should this : be?
解决方案
You have your if syntax wrong. You do not need to use {{ ... }} to insert a variable, that's only used to interpolate values in the template output.
Use
{% if d["current_enable_flag"] == TRUE %} {{ON}}
{% else %} {{OFF}}
{% endif %}
If d["current_enable_flag"] is a Python boolean, you can drop the == TRUE part altogether.
Demo:
>>> from jinja2 import Template
>>> template = Template('''\
... {% for d in client_data %}
...
... {{ d["serial_number"]}}
... {{ d["hardware_type"]}}
... {% if d["current_enable_flag"] %}
... {{ON}}
... {% else %}
... {{OFF}}
... {% endif %}
...
... {% 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)42 foo ON 81 bar OFF