如何在jinja2中的模板变量中使用特殊字符



我有一个要求,要在jinja2中呈现包含".""..""/""//"的值。

例如,我有一本字典:

values= {'pre_package_information[1]/comment': 'Device: 14.2', 'post_package_information[1]/comment': 'Device: 14.2-2'}

现在我使用jinja:来呈现这个值

mssg= "Test Succeeded!! Checking Device version for 14.2 release {{pre_package_information[1]/comment}}"
jinja2.Template(mssg).render(values)

但它给出了错误:

jinja2.exceptions.UndefinedError: 'pre_package_information' is undefined

看起来它没有在模板中使用"[""/"。如何传递这些特殊字符。我遇到了其他字符的问题,如"."".."

Jinja要求所有顶级名称都是有效的Python标识符;请参阅标识符注释部分:

Jinja2使用常规的Python2.x命名规则。有效标识符必须与[a-zA-Z_][a-zA-Z0-9_]*匹配。

要么提供符合该要求的标识符,要么将您的字典封装在另一个字典中,以间接地在其中查找您的密钥:

values = {'pre_package_information[1]/comment': 'Device: 14.2',  'post_package_information[1]/comment': 'Device: 14.2-2'}
mssg= ("Test Succeeded!! Checking Device version for 14.2 release "
       "{{values['pre_package_information[1]/comment']}}")
jinja2.Template(mssg).render(values=values)

请注意,这里values字典是作为关键字参数传入的,因此它在模板中可以作为values访问。

演示:

>>> import jinja2
>>> values = {'pre_package_information[1]/comment': 'Device: 14.2',  'post_package_information[1]/comment': 'Device: 14.2-2'}
>>> mssg= ("Test Succeeded!! Checking Device version for 14.2 release "
...        "{{values['pre_package_information[1]/comment']}}")
>>> jinja2.Template(mssg).render(values=values)
u'Test Succeeded!! Checking Device version for 14.2 release Device: 14.2'

访问模板中变量的方式需要像以下

{{ values['pre_package_information[1]/comment'] }}

并调用类似render(values=values) 的渲染器

就像在python中一样,不能有带有特殊字符的变量

最新更新