首页 » PHP教程 » 仿php模板技巧_Python中最盛行的模板引擎之一Jinja2

仿php模板技巧_Python中最盛行的模板引擎之一Jinja2

访客 2024-12-14 0

扫一扫用手机浏览

文章目录 [+]

模板引擎的运用处景非常广泛,它可以将动态数据与静态模板结合,提高发效率和代码可掩护性。

我们平时打仗各种网页,邮件关照,乃至一些解释文档,大概都是通过模板引擎天生出来的。

仿php模板技巧_Python中最盛行的模板引擎之一Jinja2

利用模板引擎,还可以赞助我们天生类似的代码,

仿php模板技巧_Python中最盛行的模板引擎之一Jinja2
(图片来自网络侵删)

比如很多ORM框架,就利用了模板引擎来天生大量的model定义代码。

本篇先容的Jinja2,是目前Python中最盛行的模板引擎之一。

1. 安装

通过pip安装:pip install Jinja2

安装后可以用如下的代码测试是否安装成功。

from jinja2 import Template# 定义模版tmpl = Template("hello {{ name }}")# 根据模版天生终极结果ret = tmpl.render(name="jinja2")print(ret)# 运行结果hello jinja2

成功安装的话,上面的代码会正常运行并打印出:hello jinja2。

2. 变量

模板中的变量便是模板中的动态内容,jinja2支持丰富的变量类型。

2.1. 一样平常变量

一样平常变量是指基本类型的变量,比如常见的bool型,数值型和字符串类型。

from jinja2 import Templatetmpl_str = """布尔型变量:{{ bool_var }}整数型变量:{{ int_var }}浮点型变量:{{ float_var }}字符串变量:{{ str_var }}"""def main(): tmpl = Template(tmpl_str) ret = tmpl.render( bool_var=True, int_var=123, float_var=3.14, str_var="jinja2 is great!", ) print(ret)if __name__ == "__main__": main()

上面的代码会正常运行并打印出:

布尔型变量:True整数型变量:123浮点型变量:3.14字符串变量:jinja2 is great!2.2. 复合变量

复合变量紧张指元组,列表和字典类型,这些类型在jinja2中也是可以直接识别出来的。

tmpl_str = """元组: {{ tuple_var }}列表: {{ list_var }}字典: {{ dict_var }}"""def main(): tmpl = Template(tmpl_str) ret = tmpl.render( tuple_var=(1, "a", 3.14), list_var=[1, "a", 3.14], dict_var={"key": "name", "value": "jinja2"}, ) print(ret)if __name__ == "__main__": main()

上面的代码会正常运行并打印出:

元组: (1, 'a', 3.14)列表: [1, 'a', 3.14]字典: {'key': 'name', 'value': 'jinja2'}2.3. 工具变量

工具除了有属性,还带有方法,比一样平常变量和复合变量更具灵巧性。

tmpl_str = """工具名称: {{ obj_var.name }}工具动作: {{ obj_var.howl() }}"""class Obj: def __init__(self, name) -> None: self.name = name def howl(self): return "WO~~~~W"def main(): tmpl = Template(tmpl_str) obj_var = Obj("Lion") ret = tmpl.render(obj_var=obj_var) print(ret)if __name__ == "__main__": main()

上面的代码会正常运行并打印出:

工具名称: Lion 工具动作: WO~~~~W3. 掌握构造

掌握构造帮助我们更加灵巧地掌握模板的解析和渲染流程,

并能够重复利用常见的行为和代码片段,提高开拓效率和代码可掩护性。

和编程措辞一样,掌握构造最常用的便是分支和循环。

3.1. 分支

分支构造让我们根据业务需求渲染模板的不同部分。

比如,下面的示例演示登录与否的情形下,不同的渲染内容。

tmpl_str = """{%- if is_login -%}你好,{{ login_name }}{%- else -%}请先登录!{%- endif -%}"""def main(): tmpl = Template(tmpl_str) # 已登录的情形 ret = tmpl.render(is_login=True, login_name="jinja2") print(ret) print("=========================") # 未登录的情形 ret = tmpl.render(is_login=False) print(ret)if __name__ == "__main__": main()

上面的代码会正常运行并打印出:

你好,jinja2=========================请先登录!3.2. 循环

渲染类似内容时,循环构造帮助我们极大减少代码量。

比如,下面的示例中,我们通过循环构造渲染一批学生的成绩。

tmpl_str = """学天生就情形:===================={%- for name, score in students.items() %}姓名: {{ name }}成绩: {{ score }}分===================={%- endfor %}...."""def main(): tmpl = Template(tmpl_str) students = { "小红": 100, "小张": 76, "小李": 68, "小黄": 99, "小明": 82, } ret = tmpl.render(students=students) print(ret)if __name__ == "__main__": main()

上面的代码会正常运行并打印出:

学天生就情形:====================姓名: 小红成绩: 100分====================姓名: 小张成绩: 76分====================姓名: 小李成绩: 68分====================姓名: 小黄成绩: 99分====================姓名: 小明成绩: 82分====================....————————————————4. 外部函数

所谓外部函数,是指在模板中利用python代码中定义的函数。
也便是把python函数注入到模板中。

这是前几天我考试测验天生一些动画代码时,碰着的一个需求。
大略来说,便是在渲染某个变量时,须要根据变量的值,变换不同的内容。
简化后的代码如下:

tmpl_str = """直线的颜色:{{ line_color }}三角形的颜色:{{ triangle_color }}正方形的颜色:{{ square_color }}"""def main(): tmpl = Template(tmpl_str) ret = tmpl.render( line_color="g", triangle_color="r", square_color="b", ) print(ret)if __name__ == "__main__": main()

须要根据颜色的标记 g,r,b等等天生不同的渲染代码。
于是,定义了一个渲染的函数:

def parse_color(color): match color: case "r": return "<<<code for color RED>>>" case "g": return "<<<code for color GREEN>>>" case "b": return "<<<code for color BLUE>>>" case _: return "<<<code for color WHITE>>>"

为了渲染时能够调用这个函数,只要大略的注册到模板中即可。

def main(): tmpl = Template(tmpl_str) tmpl.globals["parse_color"] = parse_color # .... 其他部分省略

注册到模板之后,就可以直接在模板中利用这个函数了。

tmpl_str = """直线的颜色:{{ parse_color(line_color) }}三角形的颜色:{{ parse_color(triangle_color) }}正方形的颜色:{{ parse_color(square_color) }}"""

上面的代码会正常运行并打印出:

直线的颜色:<<<code for color GREEN>>>三角形的颜色:<<<code for color RED>>>正方形的颜色:<<<code for color BLUE>>>

注入函数的这个办法可以避免在模板中写大量的if/else分支代码。

5. 总结

总之,Jinja2是一个功能强大、易于利用和扩展的Python模板引擎,适用于各种须要模板引擎的运用处景。

节制它的基本功能能够提高我们的开拓效率和代码可掩护性,使我们能够更专注于实现运用程序的功能和需求。

标签:

相关文章

大数据时代的崛起,变革与创新的力量源泉

随着信息技术的飞速发展,大数据时代已经来临。大数据作为一种新型资源,正在深刻地改变着我们的生产、生活、工作和思维方式。本文将从大数...

PHP教程 2024-12-16 阅读0 评论0

大数据时代的扎根,驱动创新与变革的力量

随着互联网技术的飞速发展,大数据已经成为当今时代最具影响力的关键词之一。大数据扎根,即深入挖掘和分析海量数据,从中提取有价值的信息...

PHP教程 2024-12-16 阅读0 评论0

大数据时代的思考,机遇与挑战并存

随着互联网技术的飞速发展,大数据已经成为当今时代的一个重要特征。大数据时代为各行各业带来了前所未有的机遇,同时也伴随着诸多挑战。本...

PHP教程 2024-12-16 阅读0 评论0

大数据时代的摊牌,介绍数据背后的真相

随着科技的飞速发展,大数据已经成为当今社会的重要资源。人们逐渐意识到,大数据在各个领域的应用价值日益凸显。大数据在给我们带来便利的...

PHP教程 2024-12-16 阅读0 评论0