我有一个需求,在这里我希望在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看起来它没有在模板中使用"["和"/"。如何传递这些特殊字符。我遇到了其他字符的问题,比如"."和".."。
发布于 2015-03-30 11:27:35
访问模板中的变量的方式需要如下所示
{{ values['pre_package_information[1]/comment'] }}
并像调用render(values=values)一样调用呈现
就像在python中一样,您不能有带有特殊字符的变量。
发布于 2015-03-30 11:29:49
Jinja要求所有顶级名称都是有效的Python标识符;请参阅 section。
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'https://stackoverflow.com/questions/29344964
复制相似问题