Flask中Jinja2模板if判断使用小于号比较渲染报错如何解决?
问题原因
- Jinja2 中被
{% %}包裹的控制逻辑块内部的运算符不会被识别为HTML标签,你错误使用了HTML转义字符<代替原生小于号<作为比较运算符,才会导致逻辑语法报错。
正确实现方案
方案1:直接使用原生小于号(最常用)
直接在逻辑块内写 < 即可,Jinja2 会优先处理逻辑判断,不会将其解析为HTML标签:
{% for index,score in report_card.items() %} <tr> {% if score['english']|float < 90.0 %} <td style="text-align: center; vertical-align: middle;"><span class="badge badge-danger">{{score['english'] }}</span></td> {% else %} <td style="text-align: center; vertical-align: middle;">{{score['english'] }}</td> {% endif %} </tr> {% endfor %}
方案2:使用Jinja2运算符别名(完全规避符号冲突)
如果担心特殊符号冲突,可以用Jinja2内置的比较运算符别名 lt(对应小于)代替 <,效果完全一致:
{% if score['english']|float lt 90.0 %}
优化建议
你可以把重复的td公共属性抽出来,仅对内容部分做条件判断,减少冗余代码:
{% for index,score in report_card.items() %} <tr> <td style="text-align: center; vertical-align: middle;"> {% if score['english']|float < 90.0 %} <span class="badge badge-danger">{{score['english'] }}</span> {% else %} {{score['english'] }} {% endif %} </td> </tr> {% endfor %}
内容的提问来源于stack exchange,提问作者charlie_boy
相关产品推荐
相关产品推荐

