Flask中Jinja2模板引擎详解(八)–自定义扩展

说实话,关于自定义扩展的开发,Jinja2的官方文档写得真心的简单。到目前为止网上可参考的资料也非常少,你必须得好好读下源码,还好依然有乐于奉献的大牛们分享了些文章来帮助我理解怎么开发扩展。本文我就完全借鉴网上前人的例子,来给大家演示一个Jinja2的自定义扩展的开发方法。

Flask中Jinja2模板引擎详解(七)–本地化

一个强大的工具一般都支持扩展或插件的开发功能,来允许第三方通过开发新扩展或插件,扩充工具本身功能,并可以贡献给社区。Jinja2也不例外,Jinja2本身提供了一部分扩展,你可以在程序中启用。同时,你还可以创建自己的扩展,来扩充模板引擎功能。本篇会先介绍Jinja2自带的扩展”jinja2.ext.i18n”的使用,自定义扩展的开发会放在下一篇阐述。

Flask中Jinja2模板引擎详解(五)–全局函数

介绍完了过滤器和测试器,接下来要讲的是Jinja2模板引擎的另一个辅助函数功能,即全局函数Global Functions。如果说过滤器是一个变量转换函数,测试器是一个返回布尔值的函数,那全局函数就可以是任意函数。可以在任一场景使用,没有输入和输出值的限制。本篇我们就来阐述下这个全局函数。

Flask中Jinja2模板引擎详解(四)–测试器

Jinja2中的测试器Test和过滤器非常相似,区别是测试器总是返回一个布尔值,它可以用来测试一个变量或者表达式,你需要使用”is”关键字来进行测试。测试器一般都是跟着if控制语句一起使用的。下面我们就来深入了解下这个测试器。

Flask中Jinja2模板引擎详解(三)–过滤器

我所了解的模板引擎大部分都会提供类似Jinja2过滤器的功能,只不过叫法不同罢了。比如PHP Smarty中的Modifiers(变量调节器或修饰器),FreeMarker中的Build-ins(内建函数),连AngularJS这样的前端框架也提供了Filter过滤器。它们都是用来在变量被显示或使用前,对其作转换处理的。可以把它认为是一种转换函数,输入的参数就是其所修饰的变量,返回的就是变量转换后的值。

Flask中Jinja2模板引擎详解(二)–上下文环境

Flask每个请求都有生命周期,在生命周期内请求有其上下文环境Request Context。我们在Flask进阶系列第一篇中有详细介绍。作为在请求中渲染的模板,自然也在请求的生命周期内,所以Flask应用中的模板可以使用到请求上下文中的环境变量,及一些辅助函数。本文就会介绍下这些变量和函数。

Flask中Jinja2模板引擎详解(一)–控制语句和表达式

让我们开启Jinja2模板引擎之旅,虽说标题是Flask中的Jinja2,其实介绍的主要是Jinja2本身,Flask是用来做例子的。如果对Flask不熟悉的朋友们建议将本博客的入门系列先看下。怎么,不知道什么是模板引擎?你可以将模板比作MVC模式中的View视图层,而模板引擎就是用来将模板同业务代码分离,并解析模板语言的程序。你可以耐心地看下本系列文章,就能体会到什么是模板引擎了。

Flask进阶系列(三)–Jinja2模板引擎

其实我们在入门系列第三篇中已经介绍了模板,包括如何渲染模板,表达式和控制语句,模板继承,还有HTML转义。我们也知道了Flask模板是基于Jinja2实现的。其实Jinja2的模板功能远不止这些,想了想,还是决定在进阶系列中,更深入地介绍Jinja2模板引擎。