@onsubmit 向方法传递参数_第七问 · Flask有哪些方法可以向Jinja模板传递数据?

595ed4502d0329d085f30aff4dd6e9fc.png

想要向模板传递数据,最常用也是最简单的方法,就是使用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
e5a1e123d49f780118d692c4c9366f30.png

感谢关注、点赞、收藏。

同时,欢迎关注我的微信公众号『极简应用Tools』。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值