Jinja中向宏传递变量遇语法错误,如何正确解析引号内变量?
Jinja宏参数中嵌入变量的正确写法
你遇到的语法错误是因为在Jinja表达式的{{ }}内部又嵌套了一层{{ }},导致解析器混淆了语法结构。而直接把变量名写在引号里时,Jinja会把它当成普通字符串字面量,不会解析成变量值。
解决这个问题有几种实用方法:
使用Jinja字符串连接符
~:
这种方式可以直接把变量和固定字符串拼接起来,不需要额外嵌套语法,Jinja会自动解析变量:{{ my_macro(value=var1 ~ ' - ' ~ var2) }}~比Python的+更适合Jinja场景,它会自动把非字符串类型的变量转换为字符串。使用字符串格式化:
如果你习惯格式化字符串的写法,可以用format过滤器,或者Jinja2.11及以上版本支持的f-string风格语法:# format过滤器写法 {{ my_macro(value='{} - {}'.format(var1, var2)) }} # f-string风格(Jinja2.11+) {{ my_macro(value=f"{var1} - {var2}") }}先定义临时变量再传递:
如果需要组合的内容逻辑复杂,先把结果存到临时变量里,再传给宏,可读性更强:{% set combined_value = var1 ~ ' - ' ~ var2 %} {{ my_macro(value=combined_value) }}
内容的提问来源于stack exchange,提问作者Youstanzr
相关产品推荐
相关产品推荐

