Jinja2模板if语句使用方法及TemplateSyntaxError错误解决
Jinja2 if语句用法解析及你的语法错误修复
嘿,我来帮你搞定这个Jinja2的语法错误,顺便梳理清楚if语句的正确使用方式~
你的代码错误分析
你写的这段代码有两个关键问题:
- 循环变量名冲突:
{% for prod in prod %}里,循环变量和你要迭代的可迭代对象都叫prod,这会导致迭代过程中变量被覆盖,逻辑完全混乱。 - if语句的语法错误:
- 在Jinja2的控制块(
{% ... %})内部,不需要再用变量插值的双大括号{{}},直接写变量名就行,{{prod.sh}}这种写法是在输出变量时用的,不是在控制逻辑里用。 - 判断数值相等要用
==运算符,is关键字是用来做类型/特性测试的(比如判断是否为空is none、是否已定义is defined),不能用来判断数值等于1。
- 在Jinja2的控制块(
修正后的代码
把循环变量改名,同时修复if条件的语法,代码就正常了:
{% for product in prod %} {% if product.sh == 1 %} <pre>Lines to come if true</pre> {% endif %} {% endfor %}
Jinja2 if语句的基础用法
1. 基本结构
最基础的if判断结构:
{% if 条件表达式 %} # 条件为真时执行的内容 {% endif %}
2. 支持的运算符
- 比较运算符:
==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于) - 逻辑运算符:
and(与)、or(或)、not(非)
示例:
{% if product.price > 50 and product.stock > 0 %} <p>可购买的中等价位商品</p> {% endif %}
3. 结合else/elif
可以和其他语言一样,用else和elif实现多分支判断:
{% if product.rating >= 4.5 %} <p>顶级好评商品</p> {% elif product.rating >= 3.5 %} <p>好评商品</p> {% else %} <p>需要改进的商品</p> {% endif %}
4. 用is关键字做特性测试
is关键字不是用来判断数值相等的,而是用来检测变量的特性,比如:
- 判断变量是否已定义:
{% if product.sh is defined %} - 判断变量是否为空:
{% if product.description is none %} - 判断是否为字符串:
{% if product.name is string %}
内容的提问来源于stack exchange,提问作者Arjun Dave
相关产品推荐
相关产品推荐

