想要向模板传递数据,最常用也是最简单的方法,就是使用render_template()
渲染模板时,一同传入相关参数。
这种方法存在一定问题,就是只能向单个模板传递数据,如果多个模板同时需要一个数据,一个个添加会非常麻烦。下面有几种方法可以为模板添加全局变量和函数:
添加方法
方法一:自定义上下文
Flask提供了一个app.context_processor
装饰器,用来注册模板上下文处理函数,可以帮我们完成统一传入变量的工作。需要注意的是,上下文处理函数需要返回字典对象。
@app.context_processor
def inject_foo():
return dict(foo='I am foo')
也可以把app.context_processor
直接作为方法调用。
def inject_foo():
return dict(foo='I am foo')
@app.context_processor(inject_foo)
方法二:注册全局函数
上述方法可以注册模板全局变量和函数,还有一种方法可以注册全局函数。
@app.template_global()
def hello():
return 'Hello'
或者
def hello():
return 'Hello'
app.add_template_global(hello)
注意,这种方法只能注册全局函数。
方法三:模板环境对象
当然,注册全局函数、全局变量和注册过滤器、测试器类似,也可以直接操作模板环境变量。
def bar():
return 'I am bar'
foo = 'I am foo'
app.jinja_env.globals['bar'] = bar
app.jinja_env.globals['foo'] = foo
参考文献
Flask Web开发实战:入门、进阶与原理解析detail.tmall.com感谢关注、点赞、收藏。
同时,欢迎关注我的微信公众号『极简应用Tools』。