jinjia2使用案例

这个案例展示了如何使用 Jinja2 渲染一个简单的 HTML 页面,其中包含变量插值、条件语句、循环、过滤器和模板继承

目录结构

project/
│
├── templates/
│   ├── base.html
│   ├── index.html
│   └── item.html
│
└── app.py

1. base.html(基础模板)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}Default Title{% endblock %}</title>
</head>
<body>
    <header>
        <h1>{% block header %}Welcome to My Website{% endblock %}</h1>
    </header>
    <main>
        {% block content %}{% endblock %}
    </main>
    <footer>
        <p>{% block footer %}Footer content here{% endblock %}</p>
    </footer>
</body>
</html>

2. index.html(子模板)

{% extends "base.html" %}

{% block title %}Home Page{% endblock %}

{% block header %}
    <h1>Home Page</h1>
{% endblock %}

{% block content %}
    <p>Hello, {{ user.name | default('Guest') }}!</p>
    <p>Here are your items:</p>
    <ul>
        {% for item in items %}
            {% include "item.html" %}
        {% endfor %}
    </ul>
{% endblock %}

3. item.html(包含模板)

<li>{{ item.name | upper }} - ${{ item.price | round(2) }}</li>

4. app.py(Python 代码)

from jinja2 import Environment, FileSystemLoader

# 创建 Jinja2 环境,加载模板文件
env = Environment(loader=FileSystemLoader('templates'))

# 定义模板上下文
context = {
    'user': {
        'name': 'John Doe'
    },
    'items': [
        {'name': 'apple', 'price': 0.5},
        {'name': 'banana', 'price': 0.75},
        {'name': 'cherry', 'price': 0.2}
    ]
}

# 加载模板
template = env.get_template('index.html')

# 渲染模板
rendered = template.render(context)

# 输出渲染结果
print(rendered)

运行 app.py

运行 app.py,将看到以下输出:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home Page</title>
</head>
<body>
    <header>
        <h1>Home Page</h1>
    </header>
    <main>
        <p>Hello, John Doe!</p>
        <p>Here are your items:</p>
        <ul>
            <li>APPLE - $0.50</li>
            <li>BANANA - $0.75</li>
            <li>CHERRY - $0.20</li>
        </ul>
    </main>
    <footer>
        <p>Footer content here</p>
    </footer>
</body>
</html>

解释

  1. 基础模板 base.html:定义了页面的基本结构,包括标题、头部、内容和页脚区域。
  2. 子模板 index.html:继承自 base.html,并覆盖了标题、头部和内容区域。使用了变量插值、条件语句和循环。
  3. 包含模板 item.html:用于渲染每个项目的列表项,展示了如何使用过滤器。
  4. Python 代码 app.py:创建 Jinja2 环境,定义上下文数据,加载并渲染模板,最后输出渲染结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小鱼爱吃火锅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值