如何仅修改Jinja2模板渲染带连字符的全局变量b-c?
Jinja2含连字符全局变量的模板渲染解决方案
问题说明
以下代码使用Jinja2渲染模板时,因全局变量键包含连字符b-c,当前模板写法会触发UndefinedError,提示'b' is undefined。要求仅修改template变量,实现渲染出hello 456的预期结果,且不能修改数据定义及模板渲染逻辑。
import jinja2 environment = jinja2.Environment() data = {'a':123, 'b-c':456} template = "hello {{ b-c }}" result = environment.from_string(template, globals = data).render() print('result:', result)
当前报错
jinja2.exceptions.UndefinedError: 'b' is undefined
预期输出
hello 456
解决方法
将模板内容修改为:
template = "hello {{ globals['b-c'] }}"
原理说明
Jinja2模板语法中,b-c会被解析为变量b与变量c的减法运算,而非直接访问键为b-c的全局变量,这是报错的核心原因。通过globals['b-c']的方式,可直接从全局变量字典中按键索引取值,避开语法解析歧义。
修改后运行代码,将输出符合预期的result: hello 456。
内容的提问来源于stack exchange,提问作者daggett
相关产品推荐
相关产品推荐

