python--Jinja2模板引擎

1. 安装

可以使用 pip 来安装 Jinja2:

pip install Jinja2

2. 基本使用

Jinja2 的基本使用步骤通常包括以下几个部分:

  1. 导入 EnvironmentFileSystemLoader
  2. 创建一个模板环境对象。
  3. 加载模板文件。
  4. 渲染模板。

以下是一个简单的示例:

from jinja2 import Environment, FileSystemLoader

# 创建一个模板环境对象,指定模板文件所在的目录
env = Environment(loader=FileSystemLoader('templates'))

# 加载模板文件
template = env.get_template('hello.html')

# 定义要传递给模板的数据
data = {'name': 'John'}

# 渲染模板
output = template.render(data)

# 打印渲染后的结果
print(output)

假设 templates 目录下有一个 hello.html 文件,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

3. 语法

变量

在 Jinja2 中,使用双花括号 {{ }} 来表示变量。例如:

<p>My name is {{ name }}.</p>

在渲染模板时,{{ name }} 会被实际传递的 name 变量的值替换。

注释

使用 {# #} 来添加注释,注释不会出现在渲染后的结果中。例如:

{# 这是一个注释 #}
<p>这是一段文本。</p>
语句

使用 {% %} 来表示语句,用于控制模板的逻辑。例如:

{% if age >= 18 %}
    <p>你已经成年了。</p>
{% else %}
    <p>你还未成年。</p>
{% endif %}

4. 过滤器

过滤器用于对变量进行格式化或转换。过滤器使用管道符号 | 来应用到变量上。以下是一些常用的过滤器:

upperlower

将字符串转换为大写或小写:

<p>{{ name|upper }}</p>
<p>{{ name|lower }}</p>
length

返回列表、字符串等的长度:

<p>列表的长度是 {{ my_list|length }}</p>
default

如果变量为 None 或空值,使用默认值:

<p>{{ name|default('Guest') }}</p>

5. 控制结构

if 语句

用于条件判断:

{% if age >= 18 %}
    <p>你已经成年了。</p>
{% elif age >= 12 %}
    <p>你是青少年。</p>
{% else %}
    <p>你是儿童。</p>
{% endif %}
for 循环

用于遍历列表、字典等可迭代对象:

<ul>
    {% for item in my_list %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>

如果要遍历字典,可以使用 items() 方法:

<dl>
    {% for key, value in my_dict.items() %}
        <dt>{{ key }}</dt>
        <dd>{{ value }}</dd>
    {% endfor %}
</dl>

6. 继承和包含

模板继承

Jinja2 支持模板继承,允许你创建一个基础模板,然后在其他模板中继承并扩展它。基础模板使用 {% block %} 定义可替换的块:

<!-- base.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>
    <header>
        <h1>网站标题</h1>
    </header>
    <main>
        {% block content %}
            <p>默认内容</p>
        {% endblock %}
    </main>
    <footer>
        <p>版权所有 &copy; 2025</p>
    </footer>
</body>
</html>

子模板使用 {% extends %} 继承基础模板,并使用 {% block %} 覆盖相应的块:

<!-- child.html -->
{% extends 'base.html' %}

{% block title %}新标题{% endblock %}

{% block content %}
    <p>这是新的内容。</p>
{% endblock %}
模板包含

使用 {% include %} 可以在一个模板中包含另一个模板:

<!-- main.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页面</title>
</head>
<body>
    {% include 'header.html' %}
    <main>
        <p>主内容</p>
    </main>
    {% include 'footer.html' %}
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一念&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值