Python Jinja2 模板引擎使用指南:语法、过滤器与加载器详解
本文详细介绍 Python Jinja2 模板引擎的核心用法。涵盖控制结构、变量取值与注释语法,解析 for 循环及字典迭代技巧。系统梳理 capitalize、lower 等常用过滤器功能,并深入讲解 PackageLoader 与 FileSystemLoader 两种加载方式及 Environment 类的配置方法,帮助开发者高效实现配置文件动态渲染。
模板的核心价值在于提升配置管理的灵活性。
Jinja2 常被用于处理配置文件,通过将关键参数替换为变量,实现配置内容的动态生成与修改。
掌握 Jinja2 的语法规范是正确使用该库的前提。
Jinja2 的模板语法设计与 Django 模板系统相似,主要包含三种核心语法结构。
- 控制结构使用 {% %} 包裹,用于执行逻辑判断或循环。
- 变量取值使用 {{ }} 包裹,用于在模板中输出变量值。
- 注释使用 {# #} 包裹,用于添加不被渲染的说明文本。
- for 循环用于遍历列表或序列数据。
{% for user in users %}
{{user.username}}
{% endfor %}
除了列表,Jinja2 同样支持对字典进行迭代操作。
{% for key,value in my_dict.iteritems() %}
{{ key }}
{{ value }}
{% endfor %}
过滤器用于处理变量值,常用过滤器包括以下几种。
- safe:在渲染过程中不对值进行 HTML 转义,保留原始格式。
- capitalize:将值的首字母转换为大写,其余字母转换为小写。
- lower:将值完全转换为小写形式。
- upper:将值完全转换为大写形式。
- title:将值中每个单词的首字母转换为大写。
- trim:去除值首尾的空格字符。
- striptags:在渲染前移除值中所有的 HTML 标签。
- join:将多个值拼接为一个字符串。
- replace:替换字符串中的指定内容。
- round:默认对数字进行四舍五入,也可通过参数指定保留小数位数或舍入方式。
- int:将值强制转换为整型。
{{ 'abc' | catialize }}
# Abc
模板继承与 super 函数用于实现模板复用与局部覆盖。
<!DOCTYPE html>
<html lang="en">
<head>
{% block head %}
<link rel="stylesheet" href="style.css" rel="external nofollow" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}
<script>This is javascript code </script>
{% endblock %}
</div>
</body>
</html>
{% extend "base.html" %} # 继承base.html文件
{% block title %} Dachenzi {% endblock %} # 定制title部分的内容
{% block head %}
{{ super() }} # 用于获取原有的信息
<style type='text/css'>
.important { color: #FFFFFF }
</style>
{% endblock %}
# 其他不修改的原封不动的继承
利用 Jinja2 进行模板渲染是实际开发中的常见场景。
Jinja2 模块提供了 Environment 类,其实例用于存储配置信息和全局对象,并从文件系统或其他来源加载模板。
以下是 Jinja2 的基本使用方法示例。
- PackageLoader:包加载器,用于从 Python 包中加载模板。
- FileSystemLoader:文件系统加载器,用于从指定目录加载模板文件。
使用包加载器加载模板的最简方式如下所示。
from jinja2 import PackageLoader, Environment
env = Environment(loader=PackageLoader('python_project', 'templates')) # 创建一个包加载器对象
template = env.get_template("base.html") # 获取一个模板文件
template.render(name="daxin", age=18)
- PackageLoader() 接收两个参数:Python 包的名称以及模板所在的目录名称。
- get_template():用于获取模板目录下指定的具体模板文件。
- render():接收变量参数,对模板进行渲染并返回结果字符串。
FileSystemLoader:文件系统加载器。
该加载器无需模板文件位于 Python 包内,可直接访问系统中的任意文件路径。
import os
from jinja2 import PackageLoader, Environment, FileSystemLoader
path_dir = "/mnt/e/files"
loader = FileSystemLoader(searchpath=path_dir)
env = Environment(loader=loader)
template = env.get_template("index.opf") # 模板文件
buf = template.render(name="daxin", age=18)
with open(os.path.join("path_dir", "index.opf"), "w" ) as fp:
fp.write(buf)
- FileSystemLoader() 的 searchpath 参数指定模板文件所在的目录路径。
- get_template():用于获取模板目录下指定的具体模板文件。
- render():接收变量参数,对模板进行渲染并返回结果字符串。
- 渲染生成的内容可直接写入或保存到配置文件中。
以上即为 Python Jinja2 模板的使用详解,更多相关资源请参阅本站其他文章。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













