Python jinja2抛出模板语法错误:意外字符
我正在向Jinja传递一个数据集,其中包含“0Y-5Y”之类的时间段字符串。这些标签对于我的组织来说是标准的,所以我不想更改它们。但是,该字符串导致Jinja抛出Python jinja2抛出模板语法错误:意外字符,python,templates,dictionary,jinja2,Python,Templates,Dictionary,Jinja2,我正在向Jinja传递一个数据集,其中包含“0Y-5Y”之类的时间段字符串。这些标签对于我的组织来说是标准的,所以我不想更改它们。但是,该字符串导致Jinja抛出TemplateSyntaxError:unexpected char错误 有人能解释一下为什么会出现这个错误,以及我如何避免它吗? 我看到带有空格字符的变量可能会抛出类似的错误,但这不适用于我的情况 似乎Jinja正试图将字符串解析为一个数字?我以为它只是一个简单的字符串,用作字典键?有没有办法强迫Jinja不要这样做,比如使用或类似
TemplateSyntaxError:unexpected char
错误
有人能解释一下为什么会出现这个错误,以及我如何避免它吗?
我看到带有空格字符的变量可能会抛出类似的错误,但这不适用于我的情况
似乎Jinja正试图将字符串解析为一个数字?我以为它只是一个简单的字符串,用作字典键?有没有办法强迫Jinja不要这样做,比如使用或类似的方法
这是我的密码:
# https://realpython.com/blog/python/primer-on-jinja-templating/#flask-examples
from jinja2 import Template
data = [
{'name':'aaa','0Y-5Y':100,'5Y-25Y':50,'total':150}
,{'name':'bbb','0Y-5Y':10,'5Y-25Y':125,'total':135}
]
html_ok = """
{% for item in data %}
{{ item.name }} {{ item.total }}
{% endfor %}
"""
html_error = """
{% for item in data %}
{{ item.name }} {{ item.0Y-5Y }}
{% endfor %}
"""
t=Template(html_ok)
print t.render( data=data )
t=Template(html_error)
print t.render( data=data )
以及输出:
aaa 150
bbb 135
Traceback (most recent call last):
File "C:\Users\beRto\Desktop\jinja_number_key.py", line 23, in <module>
t=Template(html_error)
File "C:\Python27\lib\site-packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py", line 945, in __new__
return env.from_string(source, template_class=cls)
File "C:\Python27\lib\site-packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py", line 880, in from_string
return cls.from_code(self, self.compile(source), globals, None)
File "C:\Python27\lib\site-packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py", line 591, in compile
self.handle_exception(exc_info, source_hint=source_hint)
File "C:\Python27\lib\site-packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "<unknown>", line 3, in template
TemplateSyntaxError: unexpected char u'Y' at 51
aaa150
bbb 135
回溯(最近一次呼叫最后一次):
文件“C:\Users\beRto\Desktop\jinja\u number\u key.py”,第23行,在
t=模板(html\U错误)
文件“C:\Python27\lib\site packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py”,第945行,在新的__
从字符串返回环境(源,模板类=cls)
文件“C:\Python27\lib\site packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py”,第880行,在from_字符串中
从_代码返回cls.from(self,self.compile(源代码),globals,None)
文件“C:\Python27\lib\site packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py”,第591行,在编译中
self.handle\u异常(exc\u info,source\u hint=source\u hint)
文件“C:\Python27\lib\site packages\jinja2-2.9.5-py2.7.egg\jinja2\environment.py”,第780行,在句柄\u异常中
重放(exc_类型、exc_值、tb)
模板中第3行的文件“”
TemplateSyntaxError:51处出现意外字符u'Y'
尝试item['0Y-5Y']
而不是item.0Y-5Y
,因为您正在访问数据中的单元格,如:
html_ok = """
{% for item in data %}
{{ item['name'] }} {{ item['0Y-5Y'] }}
{% endfor %}
"""
我不知道语法是有效的。我将不得不进一步研究它,但它与上面介绍的玩具程序一起工作。谢谢你的引导。我认为它不能仅仅解析item.0Y-5Y。尝试在Python中定义一个变量,比如
0Y-5Y
或者甚至0Y5Y
,它们都会失败。一个以0开头的变量/属性和一个减号?它不会喜欢的;)