python2.7的flask框架之Jinja2简单配置(全局变量&上下文行为&上下文处理器)

我们知道,Flask 使用 Jinja 2 作为模板引擎,我们也可以自由使用其它的模板引擎,但运行 Flask 本身仍然需要 Jinja2 依赖 ,这对启用富扩展是必要的,扩展可以依赖 Jinja2 存在。

我们接下来就来看下Jinja2模板引擎的默认配置:

  • 所有扩展名为 .html 、 .htm 、 .xml 以及 .xhtml 的模板会开启自动转义
  • 模板可以利用 {% autoescape %} 标签选择自动转义的开关。
  • Flask 在 Jinja2 上下文中插入了几个全局函数和助手,另外还有一些目前默认的值

然后,咱们来看下全局变量。

首先是config,它代表的是当前的配置对象 (flask.config)。

然后就是request,它代表的是当前的请求对象 (flask.request),但是当模版不是在活动的请求上下文中渲染时这个变量不可用。

完事就是session,这个代表的是当前的会话对象 (flask.session),但是当模版不是在活动的请求上下文中渲染时这个变量不可用。

再来就是g,代表的是请求相关的全局变量 (flask.g),但是当模版不是在活动的请求上下文中渲染时这个变量不可用。

然后来看url_for(),主要是flask.url_for() 函数。

最后就是get_flashed_messages(),它主要就是flask.get_flashed_messages() 函数。

完事我们来看下Jinja 上下文行为,在这其中的变量,被添加到了请求的上下文中,而非全局变量。和全局变量的区别在于,它们默认不会在导入模板的上下文中出现。这样做,一方面是考虑到性能,另一方面是为了让事情显式透明。

这也就意味着,如果我们想要导入一个需要访问请求对象的宏,其一可以显式地传入请求或请求对象的属性作为宏的参数,其二可以与上下文一起(with context)导入宏,方式如下:

{% from '_helpers.html' import my_macro with context %}

最后来看下Flask 上下文处理器。它可以自动向模板的上下文中插入新变量, 也就是说,它会在模板渲染之前运行,并且可以在模板上下文中插入新值。上下文处理器是一个返回字典的函数,这个字典的键值最终将传入应用中所有模板的上下文,我们来看个简单的代码块儿:

@app.context_processor
def inject_user():
    return dict(user=g.user)

上述代码中的上下文处理器使得模板可以使用一个名为 user ,值为 g.user 的变量。不过这个例子不是很有意思,因为 g 在模板中本来就是可用的,但上述代码解释了上下文处理器是如何工作的。

我们要知道,变量不仅限于值,上下文处理器也可以使某个函数在模板中可用(由于 Python 允许传递函数),来看个例子:

@app.context_processor
def utility_processor():
    def format_price(amount, currency=u'€'):
        return u'{0:.2f}{1}.format(amount, currency)
    return dict(format_price=format_price)

上述代码中的上下文处理器使得 format_price 函数在所有模板中可用,并且展示了上下文处理器传递函数的工作过程,完事我们来看下模板中应该咋接收这个值:

{{ format_price(0.33) }}

 好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值