Python 模板主要用于动态拼接文本、HTML、配置内容分为内置字符串模板无需额外安装和第三方专业模板引擎下面按类别梳理语法、用法、实战示例。一、内置字符串模板原生全 Python 环境可用1.f-string格式化字符串Python 3.6 首选特点语法简洁、执行效率高日常字符串拼接最推荐。基础语法python运行f普通文本 {变量/表达式/函数} 普通文本示例python运行# 1. 基础变量 name 小明 age 22 print(f姓名{name}年龄{age}) # 2. 表达式运算 a, b 15, 5 print(f相加{ab}相除{a/b:.2f}) # :.2f 保留2位小数 # 3. 调用函数 def hello(): return Hello Python print(f输出{hello()}) # 4. 字典取值 user {nick: 阿白, score: 98} print(f昵称{user[nick]}分数{user[score]})输出plaintext姓名小明年龄22 相加20相除3.00 输出Hello Python 昵称阿白分数982. str.format () 方法兼容性强通用方案语法分类无序号占位{}索引占位{0} {1}关键字占位{key}示例python运行# 1. 顺序传参 print(姓名{}城市{}.format(小李, 北京)) # 2. 索引匹配 print({1} 来自 {0}.format(上海, 小张)) # 3. 关键字传参可读性高 print(姓名{name}年龄{age}.format(name小王, age25)) # 4. 字典解包传参 data {title: 笔记, num: 10} print(文档{title}数量{num}.format(**data)) # 5. 数字格式化 print(圆周率{:.3f}.format(3.14159))输出plaintext姓名小李城市北京 小张 来自 上海 姓名小王年龄25 文档笔记数量10 圆周率3.1423. % 占位符老式语法兼容老旧代码常用占位符%s字符串%d整数%f浮点数示例python运行# 单变量 print(用户名%s % test) # 多变量元组传值 name 小美 age 20 print(姓名%s年龄%d % (name, age)) # 小数格式化 print(价格%.2f 元 % 66.889)输出plaintext用户名test 姓名小美年龄20 价格66.89 元4. string.Template 标准库模板安全替换适用场景配置文件、外部文本、用户输入场景安全性高语法为$变量名。语法python运行from string import Template # 1. 定义模板 tpl Template(文本 $变量 文本) # 2. 渲染 tpl.substitute(字典/关键字参数) # 缺参数直接报错 tpl.safe_substitute() # 缺参数保留原$符号不报错示例python运行from string import Template # 定义模板 t Template(账号$user密码$pwd) # 正常替换 info {user: admin, pwd: 123456} res1 t.substitute(info) print(res1) # 安全替换缺少pwd参数 res2 t.safe_substitute(userguest) print(res2)输出plaintext账号admin密码123456 账号guest密码$pwd二、Jinja2 模板引擎Web / 复杂模板首选功能最强支持判断、循环、过滤器、模板继承Flask、FastAPI、邮件模板、静态页面大量使用。1. 环境安装bash运行pip install jinja22. 三大核心语法标记语法作用{{ 变量/表达式 }}输出内容{% 控制语句 %}循环、判断、代码块{# 注释内容 #}模板注释渲染后不显示3. 基础用法 完整示例示例 1变量输出与注释python运行from jinja2 import Template # 模板字符串 html {# 这是模板注释不会被渲染 #} h2欢迎 {{ username }}/h2 p等级{{ level }}/p # 渲染模板 t Template(html) result t.render(username游客, level5) print(result)示例 2条件判断if / elif / elsepython运行from jinja2 import Template tpl {% if score 90 %} 优秀 {% elif score 60 %} 及格 {% else %} 不及格 {% endif %} t Template(tpl) print(t.render(score78))示例 3循环遍历for内置loop变量loop.index从 1 开始序号、loop.first/loop.last首尾判断python运行from jinja2 import Template # 遍历列表 t1 {% for item in goods %} - {{ loop.index }}{{ item }} {% endfor %} print(Template(t1).render(goods[手机, 电脑, 耳机])) # 遍历字典 t2 {% for k, v in user.items() %} {{ k }}{{ v }} {% endfor %} print(Template(t2).render(user{name: 张三, gender: 男}))示例 4过滤器|数据格式化常用过滤器upper/lower/length/default/roundpython运行from jinja2 import Template tpl 姓名{{ name|default(匿名) }} 大写{{ text|upper }} 文本长度{{ text|length }} 金额{{ money|round(1) }} t Template(tpl) print(t.render(texthello jinja2, money99.123))示例 5模板继承页面复用Web 核心使用block定义可重写区块实现头部、底部全局复用。python运行from jinja2 import Environment, DictLoader # 1. 父模板公共页面 base_html html head title{% block title %}默认标题{% endblock %}/title /head body div公共头部/div div{% block content %}主体内容{% endblock %}/div div公共底部/div /body /html # 2. 子模板继承并重写区块 child_html {% extends base %} {% block title %}首页{% endblock %} {% block content %} h3这是首页专属内容/h3 # 加载并渲染 loader DictLoader({base: base_html}) env Environment(loaderloader) t env.from_string(child_html) print(t.render())三、各类模板选型总结模板类型适用场景优点f-string普通字符串拼接、简单输出语法简单、速度最快format()多变量拼接、需要兼容低版本 Python兼容性好、语义清晰% 占位符维护老旧项目历史语法少用于新项目string.Template配置文件、外部文本、安全替换防注入、使用简单Jinja2HTML 页面、邮件、复杂动态模板支持循环 / 判断 / 继承功能强大