Jinja2 基础知识的快速入门

作为 Flask 初学者,学习 Jinja2 模板引擎的基本概念非常重要,因为它是 Flask 渲染页面时处理动态内容的核心部分。下面是一些简单的 Jinja2 基础知识的快速入门。

1. 变量替换

在 Jinja2 模板中,可以通过 {{ }} 来插入 Python 中传递给模板的变量。例如,后端传递一个变量 name 到模板:

后端代码(Flask):

python复制from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    name = "John"
    return render_template('index.html', name=name)

if __name__ == '__main__':
    app.run(debug=True)

index.html 模板:

html复制<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja2 Example</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>  <!-- 显示 "Hello, John!" -->
</body>
</html>

2. 控制结构:条件判断(if)

Jinja2 支持条件判断,可以根据不同的情况显示不同的内容。使用 {% if %}{% else %} 来进行条件判断。

示例:

python复制@app.route('/greet/<name>')
def greet(name):
    return render_template('greet.html', name=name)

greet.html 模板:

html复制<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Greeting Page</title>
</head>
<body>
    {% if name == "John" %}
        <h1>Welcome, John!</h1>
    {% else %}
        <h1>Welcome, {{ name }}!</h1>
    {% endif %}
</body>
</html>

在这个例子中,如果 URL 中传入的是 John,则显示 "Welcome, John!",否则显示 "Welcome, {name}"。

3. 循环(for)

Jinja2 也支持循环,你可以使用 {% for %} 来循环列表或字典等数据。

示例:

python复制@app.route('/items')
def items():
    items_list = ['apple', 'banana', 'cherry']
    return render_template('items.html', items=items_list)

items.html 模板:

html复制<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Items List</title>
</head>
<body>
    <ul>
        {% for item in items %}
            <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>
</html>

这段代码将生成一个无序列表,列出 items_list 中的每一项。

4. 过滤器

Jinja2 允许你使用过滤器来修改变量的输出。比如,使用 upper 过滤器将字符串转换为大写,或者使用 date 格式化日期。

示例:

python复制@app.route('/welcome')
def welcome():
    user = 'john doe'
    return render_template('welcome.html', user=user)

welcome.html 模板:

html复制<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome Page</title>
</head>
<body>
    <h1>Welcome, {{ user | upper }}!</h1>  <!-- 输出 "Welcome, JOHN DOE!" -->
</body>
</html>

你可以使用 | 来应用过滤器,upperuser 转换为大写字母。

5. 模板继承

模板继承是 Jinja2 的一个强大功能,它允许你创建一个基本的模板,然后其他模板可以继承并扩展它。通过 {% block %}{% extends %} 实现。

base.html(基础模板):

html复制<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
    <header>
        <h1>Welcome to my website!</h1>
    </header>
    
    <div>
        {% block content %}
        {% endblock %}
    </div>
</body>
</html>

index.html(继承模板):

html复制{% extends 'base.html' %}

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

{% block content %}
    <h2>Welcome to the homepage!</h2>
{% endblock %}

在这个例子中,index.html 继承了 base.html,并通过 {% block %} 填充或重写了 titlecontent 部分。

6. 包含子模板(include)

如果你有多个模板文件,Jinja2 允许你通过 {% include %} 在一个模板中嵌入另一个模板。

示例:

html复制<!-- header.html -->
<header>
    <h1>Welcome to my website!</h1>
</header>
html复制<!-- index.html -->
{% include 'header.html' %}
<p>This is the homepage content.</p>
posted @   AuriGe  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示