Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python瓶子模板引擎不允许使用句点_Python_Bottle - Fatal编程技术网

Python瓶子模板引擎不允许使用句点

Python瓶子模板引擎不允许使用句点,python,bottle,Python,Bottle,看起来瓶子模板引擎在其模板变量中没有周期。以下代码: from bottle import template x = 'blah {{blah.blah}} blah' d = {'blah.blah': 'doodah'} template(x, **d) 给我这个错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "E:\WPy-3662\python

看起来瓶子模板引擎在其模板变量中没有周期。以下代码:

from bottle import template
x = 'blah {{blah.blah}} blah'
d = {'blah.blah': 'doodah'}
template(x, **d)
给我这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "E:\WPy-3662\python-3.6.6.amd64\lib\site-packages\bottle.py", line 3622, in template
    return TEMPLATES[tplid].render(kwargs)
  File "E:\WPy-3662\python-3.6.6.amd64\lib\site-packages\bottle.py", line 3411, in render
    self.execute(stdout, env)
  File "E:\WPy-3662\python-3.6.6.amd64\lib\site-packages\bottle.py", line 3398, in execute
    eval(self.co, env)
  File "<string>", line 1, in <module>
NameError: name 'blah' is not defined
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
模板中第3622行的文件“E:\WPy-3662\python-3.6.6.amd64\lib\site packages\battle.py”
返回模板[tplid]。渲染(kwargs)
文件“E:\WPy-3662\python-3.6.6.amd64\lib\site packages\battle.py”,第3411行,在渲染中
self.execute(标准输出、环境)
文件“E:\WPy-3662\python-3.6.6.amd64\lib\site packages\battle.py”,第3398行,在execute中
评估(self.co,env)
文件“”,第1行,在
名称错误:未定义名称“blah”
我需要月经。我将模板保存在一个多行字符串数组中,然后将一个字典数组传递给瓶子模板引擎


我怎样才能避开这件事

所以问题不在于瓶子,而在于python如何在eval期间解析变量

通过eval运行时,模板字符串
blah.blah
将创建一个变量名blah.blah,该变量名将转换为两部分表示法

blah.blah = 'doodah'

不行。虽然它是一个字符串名称,所以在字典中也可以使用。如果用下划线替换点,它将起作用,因为下划线是有效的变量名

它是否允许您执行类似于
x='blah{{{blee}}}blah'
然后
template(x,blee=blah.blah)
?是的,它允许我这样做。Python中有任何模板引擎可以工作吗?没有。因为这不是模板问题。点表示法被python理解为一个操作符,在本例中,它寻找一个类。如果用下划线分隔,您会注意到它是有效的。现在,如果你引入了一类无聊的东西,那么这就行了。