关于Jinja2中{% set %}操作执行时机及条件分支内代码执行安全性的技术问询
关于Jinja2中{% set %}操作执行时机及条件分支内代码执行安全性的技术问询
嘿,这个问题问得特别务实——毕竟涉及到带副作用的函数,没人想平白触发不必要的操作对吧?
直接给你肯定的答案:完全可以放心,当var != 1时,function_with_side_effects()绝对不会被调用。
Jinja2的模板执行逻辑是严格遵循控制流的:只有当{% if %}的条件判断为真时,分支内部的所有模板代码才会被解析和执行。换而言之,条件不满足的话,分支里的内容就相当于被“忽略”了,连解析的步骤都不会走到,更别说执行里面的函数调用了。
拿你给出的代码例子来说(我顺手补全了语法缺失的部分):
{% if var == 1 %} {% set thing = function_with_side_effects() %} {% endif %}
只有当var等于1的时候,Jinja2才会处理{% set %}这一行,调用那个带副作用的函数;如果var不等于1,这段代码就像没写在模板里一样,不会产生任何额外的操作。
哪怕是更复杂的嵌套控制结构,这个逻辑也同样成立——只有进入了对应的代码块,里面的指令才会被触发执行。
备注:内容来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

