Jupyter AI

11 Jinja2模板的内容

📅 发表日期: 2024年8月10日

分类: 🌐Flask 入门

👁️阅读: --

在Flask开发中,模板渲染是非常重要的一部分。上一篇我们讨论了“路由与视图之动态路由”,了解到如何通过动态路由来处理不同的URL请求,而本篇将深入探讨Flask中使用的Jinja2模板引擎。我们将学习如何生成模板并将其渲染到浏览器中。

什么是Jinja2?

Jinja2是一个现代的和设计友好的Python模板引擎,它用于将变量和控制结构渲染到HTML模板中。它能够帮助开发者将逻辑和视图分开,使得Web应用更易于维护和扩展。

基础项目结构

首先,我们需要设置一个基本的Flask项目结构。假设我们的项目结构如下:

my_flask_app/
├── app.py
└── templates/
    └── hello.html

在这个项目中,app.py是我们的应用文件,而templates文件夹用来存放所有的HTML模板。

创建基本的Flask应用

app.py文件中,我们首先需要创建一个简单的Flask应用,并设置路由,以便在浏览器中访问它。代码如下:

from flask import Flask, render_template

app = Flask(__name__)

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

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

在这个示例中,我们创建了一个根路由/,并调用了render_template函数来渲染hello.html模板。

创建Jinja2模板

接下来,我们在templates文件夹中创建一个名为hello.html的文件。该文件的内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello Jinja2</title>
</head>
<body>
    <h1>Hello {{ name }}!</h1>
</body>
</html>

在这个模板中,我们使用了Jinja2的变量插值语法{{ name }},这里的name是从视图函数中传递过来的。

运行应用

在终端中运行以下命令,启动你的Flask应用:

python app.py

然后打开浏览器,访问http://127.0.0.1:5000/,你应该能够看到显示“Hello World!”的页面。

Jinja2的控制结构

Jinja2不仅支持简单的变量替换,它还提供了一系列控制结构,例如条件判断和循环。这使得我们能够更灵活地渲染模板内容。

条件语句

假设我们希望根据条件显示不同的消息。我们可以在hello.html中添加一个条件判断,如下所示:

<body>
    <h1>Hello {{ name }}!</h1>
    {% if name == 'World' %}
        <p>Welcome to the Jinja2 tutorial!</p>
    {% else %}
        <p>Nice to see you, {{ name }}!</p>
    {% endif %}
</body>

在这个示例中,我们使用了{% if ... %}语法来进行条件判断。

循环语句

Jinja2还支持循环,我们可以使用for语句来遍历一组数据。例如,假设我们有一个列表要渲染:

app.py中,我们可以修改索引函数如下:

@app.route('/')
def index():
    items = ['Flask', 'Django', 'FastAPI']
    return render_template('hello.html', name='World', items=items)

并在hello.html中添加循环:

<body>
    <h1>Hello {{ name }}!</h1>
    <ul>
        {% for item in items %}
            <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>

在浏览器中刷新页面后,你应该能够看到一个包含Flask、Django和FastAPI的列表。

总结

通过本篇教程,我们学习了如何在Flask中使用Jinja2模板引擎,生成动态的HTML内容。我们从简单的变量渲染开始,逐步引入了条件判断和循环等控制结构,使得我们的模板更加灵活和动态。

在下一篇“模板渲染之模板变量”中,我们将进一步探讨如何在模板中处理多个变量和复杂的数据结构,为我们的模板提供更多的内容和样式。希望大家能够在实际项目中灵活运用所学知识。