| 4380 | return self.cache[_name].execute(env['_stdout'], env) |
| 4381 | |
| 4382 | def execute(self, _stdout, kwargs): |
| 4383 | env = self.defaults.copy() |
| 4384 | env.update(kwargs) |
| 4385 | env.update({ |
| 4386 | '_stdout': _stdout, |
| 4387 | '_printlist': _stdout.extend, |
| 4388 | 'include': functools.partial(self._include, env), |
| 4389 | 'rebase': functools.partial(self._rebase, env), |
| 4390 | '_rebase': None, |
| 4391 | '_str': self._str, |
| 4392 | '_escape': self._escape, |
| 4393 | 'get': env.get, |
| 4394 | 'setdefault': env.setdefault, |
| 4395 | 'defined': env.__contains__ |
| 4396 | }) |
| 4397 | exec(self.co, env) |
| 4398 | if env.get('_rebase'): |
| 4399 | subtpl, rargs = env.pop('_rebase') |
| 4400 | rargs['base'] = ''.join(_stdout) #copy stdout |
| 4401 | del _stdout[:] # clear stdout |
| 4402 | return self._include(env, subtpl, **rargs) |
| 4403 | return env |
| 4404 | |
| 4405 | def render(self, *args, **kwargs): |
| 4406 | """ Render the template using keyword arguments as local variables. """ |