Python Jinja2 模板引擎使用指南:语法、过滤器与加载器详解

Ryan
Ryan
发布时间:2026-10-14| 3人浏览过
原创

本文详细介绍 Python Jinja2 模板引擎的核心用法。涵盖控制结构、变量取值与注释语法,解析 for 循环及字典迭代技巧。系统梳理 capitalize、lower 等常用过滤器功能,并深入讲解 PackageLoader 与 FileSystemLoader 两种加载方式及 Environment 类的配置方法,帮助开发者高效实现配置文件动态渲染。

模板的核心价值在于提升配置管理的灵活性。

Jinja2 常被用于处理配置文件,通过将关键参数替换为变量,实现配置内容的动态生成与修改。

掌握 Jinja2 的语法规范是正确使用该库的前提。

Jinja2 的模板语法设计与 Django 模板系统相似,主要包含三种核心语法结构。

  1. 控制结构使用 {% %} 包裹,用于执行逻辑判断或循环。
  2. 变量取值使用 {{ }} 包裹,用于在模板中输出变量值。
  3. 注释使用 {# #} 包裹,用于添加不被渲染的说明文本。
  4. 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 模板的使用详解,更多相关资源请参阅本站其他文章。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。