Как передать собственный словарь в суб-шаблон
С помощью bottlepy
с simple template engine
Интересно, как я мог передать весь словарь, который был передан шаблону, к его суб-шаблонам.
например в моем main.py
я имею:
@bottle.route('/')
@bottle.view('main')
def index():
"""main page"""
return {"name": "main", "foo": 12, "flag": True}
и я хочу передать все значения в словаре из моего main.tpl
к sub.tpl
$ cat sub.tpl
<h1>Hello, {{name}}</h1>
$ cat main.tpl
% include('subtemplate', name=name, foo=foo, flag=flag)
перечисление каждого ключа (как в приведенном выше примере), конечно, не очень масштабируемое и не гибкое.
итак: есть ли способ передать всю среду?
что-то вроде
$ cat main.tpl
% include('subtemplate', *env)
1 ответ
Решение
Просто мысль, от макушки головы. (Т.е. не проверено.)
@bottle.route('/')
@bottle.view('main')
def index():
"""main page"""
env = {"name": "main", "foo": 12, "flag": True} # same vars as before
env["env"] = env # add a reference to the entire dict, for passing deeper into subtemplates
return env
А потом:
% include('subtemplate', env=env)
РЕДАКТИРОВАТЬ
Спасибо @Kwartz за предложение следующего улучшения.
Более чистый метод будет простым:
% include('subtemplate', **env)
Не пробовал, но если **locals()
работает (х / т @Lukas Graf за попытку и подтверждение), тогда разумно ожидать **env
работать так же.