网站首页 > 技术文章 正文
Jinja是一种快速、表达丰富、可扩展的模板引擎。模板中的特殊占位符允许编写类似于Python语法的代码。然后将数据传递给模板,以渲染最终文档。
它包括:
- 模板继承和包含。
- 在模板中定义和导入宏。
- HTML模板可以使用自动转义以防止来自不受信任用户输入的XSS攻击。
- 一个沙盒环境可以安全地渲染不受信任的模板。
- 支持AsyncIO以生成模板并调用异步函数。
- 使用Babel进行国际化支持。
- 模板会即时编译为优化的Python代码并进行缓存,也可以提前编译。
- 异常指向模板中的正确行,以便更轻松地进行调试。
- 可扩展的过滤器、测试、函数,甚至是语法。
Jinja的理念是,虽然应用逻辑尽可能放在Python中,但不应通过过多限制功能来使模板设计师的工作变得困难。
Jiaja用处广泛
Jinja的应用范围非常广泛。它主要用于以下方面:
- Web开发:Jinja最常用于Web开发中的模板渲染,特别是与框架如Flask、Django等结合使用。开发人员可以使用Jinja创建动态网页,从而以更灵活的方式呈现数据。
- 邮件生成:Jinja可以用于生成电子邮件内容。通过将邮件模板与数据结合,可以轻松地生成个性化的电子邮件内容。
- 配置文件生成:Jinja也可以用于生成配置文件。开发人员可以使用Jinja模板来动态地生成各种配置文件,以适应不同的环境和需求。
- 文档生成:Jinja可以用于生成各种文档格式,如Markdown、PDF等。通过结合模板和数据,可以自动化地生成文档内容。
- 报告生成:Jinja还可以用于生成各种报告,如业务报告、数据分析报告等。通过模板化的方法,可以更方便地生成和定制报告内容。
由于Jinja的灵活性和易用性,它在许多领域都有广泛的应用,成为Python开发人员的重要工具之一。
比如:我们在SmartNotebook将Jinja2应用SQL:SQL语句嵌套Jinja2表达式,与python 变量交互来实现动态SQL/SQL 模板;在SmartNotebook里面:SQL单元格支持Jinja2表达式模板,用户可以在SQL代码中引用Python变量,并且使用流程控制(if...else.../for循环等等),极大程度上扩展了SQL语言的灵活性。
Jinja2的基础知识
Jinja模板是一个简单的文本文件/文本串。Jinja可以生成任何基于文本的格式。Jinja模板不需要具有特定的扩展名,比如 .html、.xml,或者其他任何扩展名都可以。模板包含变量和/或表达式,当模板被渲染时,这些变量和表达式将被值替换;同时包含标签,用于控制模板的逻辑。
有几种不同的分隔符。默认的Jinja分隔符配置如下:
- {% ... %} 用于语句(Statements)
- {{ ... }} 用于表达式,用于向模板输出打印内容(Expressions)
- {# ... #} 用于注释,不会包含在模板输出中
在Jinja中有两个关键对象,称为环境(Environment)和模板(Template)。环境对象用于初始化、存储和配置模板渲染所需的变量。模板对象表示一个模板文件,可以用于生成一个或多个输出。
接下来所有示例均在SmartNotebook 中阐述模板语法,环境(Environment)是当前notebook 对应kernel 上下文环境,kernel 中变量和对象,可以在代码单元格中生成和加载变量;模板可以使用Markdown 单元格或SQL 单元格来示例。接下来一个简单示例如下:
a=range(10)
{% for item in a %}
item:{{ item }} ,{{ item**2}}
{% endfor %}
For循环
循环遍历序列中的每个项。可以循环迭代列表、字典、集合,列表或生成器可以参考上面的例子,dict 字典迭代For循环如下:
my_dict ={"name":"smartnotebook","address":"shanghai"}
<dl>
{% for key, value in my_dict.items() %}
{{ key|e }} :{{ value|e }}
{% endfor %}
</dl>
Python 字典可能不按您希望的顺序显示。如果顺序很重要,请使用 |dictsort 过滤器。
{% for key, value in my_dict | dictsort %}
{{ key|e }} : {{ value|e }}
{% endfor %}
在 for 循环块内部,您可以访问一些特殊变量:
变量 | 描述 |
loop.index | 当前循环的迭代次数。(从 1 开始索引) |
loop.index0 | 当前循环的迭代次数。(从 0 开始索引) |
loop.revindex | 距离循环末尾的迭代次数。(从 1 开始索引) |
loop.revindex0 | 距离循环末尾的迭代次数。(从 0 开始索引) |
loop.first | 如果是第一次迭代,则为 True。 |
loop.last | 如果是最后一次迭代,则为 True。 |
loop.length | 序列中的项数。 |
loop.cycle | 在列表序列之间循环的辅助函数。请参阅下面的说明。 |
loop.depth | 指示渲染当前递归循环的深度。从第 1 级开始。 |
loop.depth0 | 指示渲染当前递归循环的深度。从第 0 级开始。 |
loop.previtem | 上一次循环迭代中的项。在第一次迭代期间未定义。 |
loop.nextitem | 下一次循环迭代中的项。在最后一次迭代期间未定义。 |
loop.changed(*val) | 如果之前调用时的值不同(或根本未调用),则为 True。 |
{% for key, value in my_dict | dictsort %}
{{ key|e }} : {{ value|e }} ;{{ loop.cycle('odd', 'even') }};{{loop.index}}
{% endfor %}
If 判断
Jinja2 中的 if 语句与 Python 中的 if 语句类似。在最简单的形式下,您可以使用它来测试变量是否已定义、非空且非假:
a = 1
{% if a > 0 %}
a = 1
{% endif %}
对于多个分支,elif 和 else 可以像在 Python 中一样使用。您也可以在那里使用更复杂的表达式:
{% if a < 0 %}
a
{% else%}
aaaa
{% endif %}
Filters (过滤器)
过滤器部分允许您在模板数据块上应用常规的Jinja2过滤器。只需将代码放在特殊的过滤器部分中即可:
{% filter upper %}
This text becomes uppercase
{% endfilter %}
其他指令参考:https://jinja.palletsprojects.com/en/3.1.x/templates/
Jinja2是一款快速、表达丰富、可扩展的模板引擎,广泛应用于Web开发、邮件生成、配置文件生成、文档生成和报告生成等领域。其特点包括模板继承、HTML自动转义、安全沙盒环境等。Jinja2支持丰富的语法和功能,提供了丰富的特殊变量和过滤器,可以灵活处理模板渲染逻辑。它的理念是保持Python代码简洁、灵活,同时提供强大的模板设计功能。
猜你喜欢
- 2025-05-02 python文件读写造作最佳实践——with语句管理文件资源
- 2025-05-02 Python Flask服务器模块,模板继承和模板变量
- 2025-05-02 「python+django」django中使用jinja2模板
- 2025-05-02 docopt,一个超厉害的 Python 库!
- 2025-05-02 python优雅执行SQL模板语句(pycharm执行sql)
- 2025-05-02 程序员简历例句—范例Java、Python、C++模板
- 2025-05-02 快速生成定制化的Word文档:Python实践指南
- 2025-05-02 jinjia2:一个超级模版Python库(python jinja2模板)
- 2025-05-02 Python | Django 模板 template(python模板方法)
- 05-27程序员用 Python 爬取抖音高颜值美女
- 05-27YOLO v3、FaceNet和SVM的人脸检测识别系统源码(python)分享
- 05-27「工具推荐」世界上最简单的人脸识别库 44.7 star
- 05-27开源人脸识别系统源码推荐
- 05-27Go 人脸识别教程
- 05-27Python 深度学习之人脸识别(yolo+facenet)
- 05-27简单的Py人脸识别
- 05-27Python编程 - 基于OpenCV实现人脸识别(实践篇)爬虫+人脸识别
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 82℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)