跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python 模板系统
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python模板系统 = '''Python模板系统'''是Web开发中用于动态生成HTML、XML或其他文本格式的核心工具。它允许开发者将业务逻辑(Python代码)与展示层(HTML/CSS)分离,从而提高代码可维护性和复用性。本文将详细介绍Python模板系统的工作原理、常见实现(如Jinja2、Django模板)及实际应用案例。 == 核心概念 == 模板系统通过以下机制实现动态内容渲染: * '''变量替换''':将模板中的占位符(如<code>{{ variable }}</code>)替换为实际值。 * '''控制结构''':支持条件判断(<code>{% if %}</code>)、循环(<code>{% for %}</code>)等逻辑。 * '''模板继承''':通过基模板定义通用布局,子模板覆盖特定区块(如<code>{% block content %}</code>)。 * '''过滤器''':对变量进行格式化或转换(如<code>{{ text|upper }}</code>将文本转为大写)。 === 模板渲染流程 === <mermaid> graph LR A[模板文件] --> B[模板引擎] B --> C[解析语法树] C --> D[绑定上下文数据] D --> E[生成最终输出] </mermaid> == 主流模板引擎 == === Jinja2 === Jinja2是Python生态中最流行的模板引擎,以灵活性和高性能著称。 ==== 基础示例 ==== <syntaxhighlight lang="python"> from jinja2 import Template template = Template("Hello, {{ name }}!") output = template.render(name="World") print(output) # 输出: Hello, World! </syntaxhighlight> ==== 控制结构示例 ==== <syntaxhighlight lang="html+jinja"> <ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul> </syntaxhighlight> === Django模板 === Django内置模板系统强调安全性,默认自动转义HTML特殊字符。 ==== 模板继承示例 ==== '''base.html''' <syntaxhighlight lang="html+django"> <!DOCTYPE html> <html> <head> <title>{% block title %}默认标题{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body> </html> </syntaxhighlight> '''child.html''' <syntaxhighlight lang="html+django"> {% extends "base.html" %} {% block title %}子页面标题{% endblock %} {% block content %} <h1>这是子模板内容</h1> {% endblock %} </syntaxhighlight> == 高级特性 == === 自定义过滤器 === 在Jinja2中扩展功能: <syntaxhighlight lang="python"> from jinja2 import Environment def reverse_filter(s): return s[::-1] env = Environment() env.filters['reverse'] = reverse_filter template = env.from_string("{{ text|reverse }}") print(template.render(text="Python")) # 输出: nohtyP </syntaxhighlight> === 宏(Macros) === 类似函数的重用机制: <syntaxhighlight lang="html+jinja"> {% macro input(name, type='text') %} <input type="{{ type }}" name="{{ name }}"> {% endmacro %} {{ input('username') }} <!-- 渲染为 <input type="text" name="username"> --> </syntaxhighlight> == 性能优化 == * '''预编译模板''':Jinja2的<code>Environment</code>可缓存解析结果。 * '''限制复杂度''':避免深层嵌套循环或递归模板。 * 使用Django的<code>{% static %}</code>标签管理静态文件引用。 == 数学公式支持(可选) == 模板变量可结合数学表达式,例如计算折扣价格: <math> \text{final\_price} = \text{price} \times (1 - \text{discount}) </math> == 实际案例 == '''电商产品页面模板'''(Jinja2实现): <syntaxhighlight lang="html+jinja"> {% extends "layout.html" %} {% block body %} <h1>{{ product.name }}</h1> <p>价格: {{ product.price|format_currency }}</p> {% if product.in_stock %} <button>加入购物车</button> {% else %} <p class="warning">缺货中</p> {% endif %} {% endblock %} </syntaxhighlight> == 常见问题 == * '''Q: 如何防止XSS攻击?''' A: Django模板自动转义变量,Jinja2需显式启用<code>autoescape=True</code>。 * '''Q: 模板调试技巧?''' A: 使用<code>{{ debug() }}</code>函数(Flask-DebugToolbar)或Django的<code>{% debug %}</code>标签。 == 总结 == Python模板系统通过分离逻辑与展示层,显著提升Web开发效率。掌握Jinja2/Django模板的变量替换、控制结构和继承机制,能够构建更易维护的动态页面。进阶用户可通过自定义过滤器和宏进一步优化代码结构。 [[Category:编程语言]] [[Category:Python]] [[Category:Python Web 开发]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Debug()
(
编辑
)
模板:Text
(
编辑
)
模板:Variable
(
编辑
)