Как передать собственный словарь в суб-шаблон

С помощью 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 работать так же.

Другие вопросы по тегам