使用Bottle.py在每个页面的模板上下文中包含变量

时间:2012-03-18 15:33:06

标签: python templates flask bottle

你在Flask中有没有both.py等效的上下文处理器?

3 个答案:

答案 0 :(得分:4)

如果您使用带有SimpleTemplate的vanilla Bottle,我会偶然发现一个解决方案。

对于我的网站,我需要访问每个模板中的某些功能,app.get_url显然是其中之一。这对我有用:

# after app creation, but before the views
SimpleTemplate.defaults["get_url"] = app.get_url
SimpleTemplate.defaults["url"] = lambda: request.url
SimpleTemplate.defaults["fullpath"] = lambda: request.fullpath
SimpleTemplate.defaults["sorted"] = sorted

这适用于Bottle 0.9,我没有测试更新版本的框架。

此行为未记录,但Marcel Hellkamp在this thread中对此进行了解释。在那里,还提到了其他解决方案:

  • 传递_vars中的全局变量或类似的模板arg。
  • 创建装饰器以提供默认值。

此外,在Bottle 0.10中,SimpleTemplate模板命名空间中引入了与该问题相关的新功能:defined, get, and setdefault

答案 1 :(得分:0)

注意:此解决方案可与其他模板引擎一起使用。该技术完全相同,但您使用BaseTemplate(适用于所有模板类)或您要使用的引擎类。

答案 2 :(得分:0)

使用 Helgi 中的previous answer,我使用此钩子制作了一个上下文处理器,如(瓶0.12.x):

import bottle


@bottle.hook('before_request')
def _context_processor():
    bottle.SimpleTemplate.defaults['foo'] = 'F00'
    bottle.SimpleTemplate.defaults['bar'] = 'B@R'