Bottle py和Jinja2全局变量

时间:2015-01-17 23:11:56

标签: python jinja2 bottle

我在新应用程序中使用了bottle.py框架和Jinja2模板。

每当用户登录应用程序时,我想添加一个新的全局Jinja2变量,其中包含活动用户的名称,因此在部分模板(标题)中,我可以显示此名称。

在我的python(瓶子)文件中,根据我迄今为止搜索过的内容,我尝试了几件事,但还没有成功。

这是我在函数中尝试的最后一件事:

import jinja2
env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates'))
env.globals['myglobal'] = 'My global'
#env.globals.update({'myglobal': 'My global'})

但是,当把它放到标题模板中时:{{myglobal}}它根本就不会出现。

由于这是我第一次使用瓶子和jinja2,任何人都知道如何实现这个目标?

3 个答案:

答案 0 :(得分:3)

我有类似的设置,这适用于我使用内置于瓶中的BaseTemplate:

from bottle import BaseTemplate
BaseTemplate.defaults['myglobal'] = 'My global'

答案 1 :(得分:2)

在这种情况下,你需要使用before_request钩子,如下所示:

e.Register(() => new EmptyUnitOfWork());

答案 2 :(得分:0)

from bottle import Jinja2Template
Jinja2Template.defaults['foo'] = 'bar'

这是为每个渲染的jinja2模板添加一个变量。如果你想添加一个过滤器,我就是这样做的:

import functools
from bottle import jinja2_view

def foo():
    return 'bar'
view = functools.partial(jinja2_view, template_settings={
    'filters': {'foo': foo}})

您可以使用此设置任何jinja2设置。