Python Flask 基础入门 第五课:模板引擎 Jinjia2 模板继承

发布时间:2023年12月20日

模板引擎

当涉及到Flask框架中的模板渲染时,这篇博客将深入讨论该主题,并分成不同章节来详细介绍。我们将学习什么是模板引擎,如何使用Jinja2来渲染HTML页面,如何传递数据给模板以动态生成内容,以及如何使用模板继承来创建一致的页面布局。

什么是模板引擎?

模板引擎是一种用于动态生成HTML或其他文本内容的工具。在Flask中,我们使用Jinja2作为默认的模板引擎。Jinja2允许我们在HTML模板中插入动态内容,例如从数据库中检索的数据或用户提供的输入。

使用Jinja2模板引擎

安装Jinja2

要开始使用Jinja2,首先需要确保Flask已正确安装,因为Flask已经集成了Jinja2。如果未安装,可以使用pip进行安装:

pip install Flask

创建HTML模板

  1. 在Flask应用的根目录下创建一个名为 “templates” 的文件夹。
  2. 在 “templates” 文件夹中创建一个HTML模板文件,例如 “index.html”。

模板变量

在模板中,您可以使用双大括号 {{ 变量名 }} 来插入变量。这些变量将在渲染模板时由Flask动态替换。

<!DOCTYPE html>
<html>
<head>
    <title>模板示例</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ content }}</p>
</body>
</html>

渲染模板

在Flask应用中,您可以使用render_template函数来渲染模板并传递变量的值。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    title = "欢迎来到我的网站"
    content = "这是一个使用Flask和Jinja2的示例页面"
    return render_template('index.html', title=title, content=content)

传递数据给模板

要向模板传递数据,您可以在render_template函数中提供关键字参数。上面的示例已经演示了如何传递titlecontent变量。您可以传递任何需要在模板中显示的数据。

模板继承

模板继承是一种强大的技术,可以使您在多个页面中共享相同的布局结构。通常,您会创建一个基本模板,然后在不同页面上扩展它。

创建基本模板

  1. 创建一个名为 “base.html” 的基本模板文件,其中包含通用的HTML结构,例如头部、导航栏和页脚。
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <nav>
        <ul>
            <li><a href="/">首页</a></li>
            <li><a href="/about">关于</a></li>
        </ul>
    </nav>
    
    <div class="content">
        {% block content %}{% endblock %}
    </div>

    <footer>&copy; 2023 My Website</footer>
</body>
</html>

扩展基本模板

在其他页面的模板中,您可以使用{% extends 'base.html' %}来扩展基本模板,并使用{% block %}标记来定义特定页面的内容。

{% extends 'base.html' %}

{% block title %}关于我们{% endblock %}

{% block content %}
    <h1>关于我们</h1>
    <p>这是关于我们页面的内容。</p>
{% endblock %}

使用模板继承,您可以轻松创建具有一致外观的多个页面,同时减少重复的HTML代码。

这些章节涵盖了Flask框架中模板渲染的基础知识,从模板引擎的概念到使用Jinja2创建模板、传递数据和使用模板继承来实现一致的页面布局。随着实践的深入,您将能够创建出精美而功能强大的Web应用程序。

文章来源:https://blog.csdn.net/qq_31600443/article/details/135080274
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。