如何将自己的字典传递给子模板

时间:2016-07-21 20:41:01

标签: python templates template-engine bottle

bottlepysimple template engine一起使用我想知道如何将传递的整个词典传递给模板上的子模板。

e.g。在我的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 个答案:

答案 0 :(得分:2)

只是一个想法,脱离我的头顶。 (即未经测试。)

@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也能正常工作是合理的。