diff options
author | Marcel Hellkamp <marc@gsites.de> | 2009-10-06 00:48:00 +0200 |
---|---|---|
committer | Marcel Hellkamp <marc@gsites.de> | 2009-10-06 00:48:00 +0200 |
commit | 0d0425150126cf8dad4d86502acf738368fdc1c6 (patch) | |
tree | b1aeedc73fa12e6c3659b464acd1fff0b6a24c89 | |
parent | cd8c6b755a62a051d683b60d86142b56e081e45f (diff) | |
download | bottle-0d0425150126cf8dad4d86502acf738368fdc1c6.tar.gz |
SimpleTemplate: Now it is even possible to access objects created in subtemplates using '_'
Example:
%include helper_functions
%myhelper = _['test_helper']
-rw-r--r-- | bottle.py | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -855,8 +855,8 @@ class SimpleTemplate(BaseTemplate): self.includes[name] = SimpleTemplate(name=name, lookup=self.lookup) if subtpl == 'include': code.append(' ' * indent + - "_inc=dict(%s);_inc.update(_stdout=_stdout);_includes[%s].render(**_inc)\n" - % (args, repr(name))) + "_ = _includes[%s].execute(_stdout, %s)\n" + % (repr(name), args)) else: code.append(' ' * indent + "_tpl['_rebase'] = (_includes[%s], dict(%s))\n" @@ -879,20 +879,22 @@ class SimpleTemplate(BaseTemplate): flush() return ''.join(code) - def render(self, **args): - """ Render the template using keyword arguments as local variables. """ - stdout = args.get('_stdout',[]) + def execute(self, stdout, **args): args['_stdout'] = stdout args['_includes'] = self.includes args['_tpl'] = args eval(self.co, args) - if '_rebase' not in args: - return args['_stdout'] - subtpl, args = args['_rebase'] - args['_base'] = stdout[:] #copy stdout - del stdout[:] # clear stdout - args['_stdout'] = stdout #reattach stdout - return subtpl.render(**args) + if '_rebase' in args: + subtpl, args = args['_rebase'] + args['_base'] = stdout[:] #copy stdout + del stdout[:] # clear stdout + return subtpl.execute(stdout, **args) + return args + def render(self, **args): + """ Render the template using keyword arguments as local variables. """ + stdout = [] + self.execute(stdout, **args) + return stdout |