7

你在 Flask 中是否有一个与bottle.py 等效的上下文处理器?

4

3 回答 3

5

如果您使用带有 SimpleTemplate 的香草瓶,我偶然发现了一个解决方案。

对于我的网站,我需要访问每个模板中的一些功能,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 在此线程中对其进行了解释。在那里,还提到了其他解决方案:

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

此外,在 Bottle 0.10 中,在 SimpleTemplate 模板命名空间中引入了与该问题相关的新函数:definedgetsetdefault

于 2012-05-20T10:16:36.827 回答
1

使用Helgi的上一个答案,我使用这个钩子来制作一个上下文处理器,如(bottle 0.12.x) :

import bottle


@bottle.hook('before_request')
def _context_processor():
    bottle.SimpleTemplate.defaults['foo'] = 'F00'
    bottle.SimpleTemplate.defaults['bar'] = 'B@R'
于 2018-07-10T14:14:57.257 回答
0

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

于 2014-10-03T19:25:13.223 回答