📅  最后修改于: 2023-12-03 14:52:30.314000             🧑  作者: Mango
Python 是一种面向对象和动态类型的编程语言。它具有许多代码优化和快速开发特性,其中最重要的是代码重用。其中之一是使用模板引擎。在本指南中,我们将讨论如何在 Python 中创建模板。
模板是一种自定义结构,用于表示特定数据格式的字段。其目的是将业务逻辑从应用程序的外观中分离出来,以便能够轻松地更改该组件的样式和布局,但仍保持相同的业务逻辑。
在 Python 中,有一些优秀的第三方模板引擎可供您选择。其中最受欢迎的是 Jinja2 和 Django 模板。在本指南中,我们将重点介绍 Jinja2。
Jinja2 是 Python 中最流行的模板引擎之一。它提供高度可定制的模板和过滤器,这使得模板开发变得更加简单。Jinja2 还支持模板继承,这使得模板重用变得更加容易。
在开始创建模板之前,您必须通过下面的命令安装 Jinja2:
pip install jinja2
创建模板最基本的要求是一个字符串。在 Jinja2 中,我们可以通过在输出中使用两个大括号将变量包装起来并在其周围添加必要的 HTML。在下面的示例中,我们将展示如何在 Jinja2 中创建一个简单的模板。
# 导入 Jinja2 模块
from jinja2 import Template
# 模板字符串
template_string = "Hello {{ name }}!"
# 创建 Jinja2 模板对象
template = Template(template_string)
# 渲染模板
output = template.render(name="World")
# 输出渲染后的 HTML
print(output)
以上代码输出:
Hello World!
其中,"name" 是我们在模板中定义的变量,输出语句将"World"赋给该变量并渲染 HTML。
Jinja2 过滤器允许您使用不同的过滤器来对变量进行操作。Jinja2 过滤器的语法如下:
{{ variable | filter }}
在下面的示例中,我们将使用 Jinja2 过滤器 capitalize 来将输入的字符串中的首字母大写。
# 导入模块
from jinja2 import Template
# 模板字符串
template_string = "Hello {{ name|capitalize }}!"
# 创建 Jinja2 模板对象
template = Template(template_string)
# 渲染模板
output = template.render(name="world")
# 输出渲染后的 HTML
print(output)
以上代码输出:
Hello World!
Jinja2 继承允许您使用父级模板定义和布局应用程序的公共元素,并使用子级模板扩展和更改父级模板。在下面的示例中,我们将展示如何使用 Jinja2 继承。
首先,我们将定义一个基础 HTML 模板。该模板包括一个通用的头部和脚部,以及两个区域用于扩展子级模板:
<!-- base.html -->
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<header>
{% block header %}{% endblock %}
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
{% block footer %}{% endblock %}
</footer>
</body>
</html>
接下来,我们将创建一个子级模板并扩展基础模板。在下面的示例中,我们将重写 title 和 content 区域。
# 导入模块
from jinja2 import Environment, FileSystemLoader
# 创建环境
env = Environment(loader=FileSystemLoader('.'))
# 获取模板
template = env.get_template('base.html')
# 创建上下文
context = {
'title': 'My Page',
'content': 'My Content',
}
# 渲染模板
output = template.render(context)
# 输出渲染后的 HTML
print(output)
Jinja2 将使用父级模板并扩展子级模板:
<!-- 渲染后的 HTML -->
<html>
<head>
<title>My Page</title>
</head>
<body>
<header></header>
<main>
My Content
</main>
<footer></footer>
</body>
</html>
在本指南中,我们了解了什么是模板和 Jinja2,并展示了如何在 Python 中使用 Jinja2 创建简单的模板、过滤器和继承。这种结构化数据可轻松管理大型项目,同时提高了效率和代码可读性。