我正在使用python web框架Bottle来生成html模板,我想将模板变量的字典从瓶子服务器传递到页面。 documentation表示可以这样做:
@route(’/hello/<name>’)
@view(’hello_template’)
def hello(name=’World’):
return dict(name=name)
@view
模板应该可以访问name
。我想用搜索结果字典做同样的事情,简化到这里:
@get('/search')
@view('search')
def search():
// load results
// return results
results = {'1': {'param1': 'val1', 'param2': 'val2', 'param3': 'val3'},
'2': {'param1': 'val1', 'param2': 'val2', 'param3': 'val3'}
}
return results
但是我收到了这个错误:
TypeError('template() keywords must be strings',)
使用此追溯:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/bottle.py", line 862, in _handle
return route.call(**args)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/bottle.py", line 1732, in wrapper
rv = callback(*a, **ka)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/bottle.py", line 3619, in wrapper
return template(tpl_name, **tplvars)
TypeError: template() keywords must be strings
我可以找到类似的问题,但他们都认为params可以正确通过,所以我决定问。谢谢!
答案 0 :(得分:-1)
我真的不明白你是怎么得到这个错误的,但无论如何你的代码等于:
@route('/search')
def search():
return template('search', **results)
**
表示template()
函数必须将results
解包为关键字参数。换句话说,这段代码:
@route('/')
def index()
return template(template_name, **{'a': 1, 'b': 2})
Absolutley等于:
@route('/')
def index():
return template(template_name, a=1, b=2)
甚至等于这个:
@route('/')
@view(template_name)
def index():
return {'a': 1, 'b': 2}
现在问问自己如何在模板中访问名为1
或2
的变量(您尝试使用此变量)?
在您的情况下template()
函数将results
解包为关键字参数。
如果您想将results
传递到模板中,请使用return dict(results=results)
但是如果你提供真正的代码,我想你会得到更详细的答案