Python的Flask框架标配模板引擎Jinja2的使用教程

好的。以下是“Python的Flask框架标配模板引擎Jinja2的使用教程”的完整攻略:

什么是Jinja2

Jinja2是Flask框架默认的模板引擎。它是一个基于Python的高级模板引擎,它的设计初衷是为了和Flask框架紧密结合,因此其语法与Python非常相似。

Jinja2支持继承、过滤器、变量、控制结构等常见的模板引擎功能。同时也支持自定义过滤器、函数等扩展功能。

Jinja2模板的使用方法

基本语法

Jinja2模板语法使用{{}}表示变量,{% %}表示控制结构,{# #}表示注释。

<!DOCTYPE html>
<html>
  <head>
    <title>Flask + Jinja2 示例</title>
  </head>
  <body>
    <h1>Hello, {{ name }}!</h1>
  </body>
</html>

上述示例中,{{ name }} 表示一个变量,它的值可以在代码中进行指定。例如:

from flask import Flask, render_template

app = Flask(__name__)

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

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

过滤器

Jinja2模板还支持过滤器,可以对变量进行处理。例如:

<!DOCTYPE html>
<html>
  <head>
    <title>Flask + Jinja2 示例</title>
  </head>
  <body>
    <h1>{{ name|join(', ') }}</h1>
  </body>
</html>

上述示例中,name 变量通过 |join(', ') 过滤器实现以逗号分隔每个单词。

控制结构

Jinja2模板支持 if/else、for 等控制结构。例如:

<!DOCTYPE html>
<html>
  <head>
    <title>Flask + Jinja2 示例</title>
  </head>
  <body>
    <ul>
      {% for item in items %}
        {% if item %}
          <li>{{ item }}</li>
        {% endif %}
      {% endfor %}
    </ul>
  </body>
</html>

上述示例中,items 是一个列表,在模板中使用 for 循环遍历列表,在遍历的过程中,使用 if 控制结构过滤掉空元素,最终输出列表中的每个元素到 HTML 页面上。

继承

Jinja2模板还支持模板继承,让我们可以更加优雅地组织我们的网站页面。例如:

base.html

<!DOCTYPE html>
<html>
  <head>
    <title>{% block title %}Flask + Jinja2 示例{% endblock %}</title>
  </head>
  <body>
    <div class="header">
      {% block header %}{% endblock %}
    </div>
    {% block content %}{% endblock %}
    <div class="footer">
      {% block footer %}{% endblock %}
    </div>
  </body>
</html>

child.html

{% extends "base.html" %}

{% block title %}Flask + Jinja2 子页面示例{% endblock %}

{% block header %}
  <h1>Flask + Jinja2 子页面示例</h1>
{% endblock %}

{% block content %}
  <p>这是子页面的内容。</p>
{% endblock %}

{% block footer %}
  <p>版权所有 © 2021</p>
{% endblock %}

上述示例中,child.html 继承了 base.html 模板,并在 block 中覆盖了父模板中的内容。

示例

示例1:变量和过滤器的使用

代码:

<!DOCTYPE html>
<html>
  <head>
    <title>Flask + Jinja2 示例</title>
  </head>
  <body>
    <h1>{{ name|title }}</h1>
    <p>{{ description|truncate(30, True) }}</p>
    <ul>
      {% for item in items %}
        {% if item %}
          <li>{{ item }}</li>
        {% endif %}
      {% endfor %}
    </ul>
  </body>
</html>

flask部分:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    name = 'james'
    description = 'Hello, this is a description of the new site'
    items = ['item1', 'item2', 'item3']
    return render_template('example.html', name=name, description=description, items=items)

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

上述示例中,定义了变量 name、description、items 并在 Flask 中 render_template 函数生成 HTML 页面,展示了变量和过滤器的使用。

示例2:页面继承

代码:

base.html

<!DOCTYPE html>
<html>
  <head>
    <title>{% block title %}Flask + Jinja2 示例{% endblock %}</title>
  </head>
  <body>
    <div class="header">
      {% block header %}{% endblock %}
    </div>
    {% block content %}{% endblock %}
    <div class="footer">
      {% block footer %}{% endblock %}
    </div>
  </body>
</html>

child.html

{% extends "base.html" %}

{% block title %}Flask + Jinja2 子页面示例{% endblock %}

{% block header %}
  <h1>Flask + Jinja2 子页面示例</h1>
{% endblock %}

{% block content %}
  <p>这是子页面的内容。</p>
{% endblock %}

{% block footer %}
  <p>版权所有 © 2021</p>
{% endblock %}

flask部分:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/child')
def child():
    return render_template('child.html')

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

上述示例中,child.html 继承了 base.html 模板,并在 block 中覆盖了父模板中的内容,Flask 中生成页面时会加载所有继承的模板并组合后输出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的Flask框架标配模板引擎Jinja2的使用教程 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 使用apidoc管理RESTful风格Flask项目接口文档方法

    使用apidoc管理RESTful风格Flask项目接口文档的步骤如下: 一、安装APIDoc APIDoc是一个用于生成文档的工具,可以通过npm安装: npm install apidoc -g 二、在项目中添加Apidoc注释 在代码中添加注释,以便APIDoc能够识别、解析并自动生成API文档。以Flask为例,注释标识符是”””,示例代码如下: @…

    Flask 2023年5月15日
    00
  • vue使用WebSocket模拟实现聊天功能

    下面是详细讲解“vue使用WebSocket模拟实现聊天功能”的攻略。 一、背景介绍 WebSocket协议是HTML5出现后新增的一项协议,基于TCP协议,可以实现客户端和服务器的双向通信。相比传统的Ajax轮询或Comet长轮询方式,WebSocket具有更低的延迟、更高的性能和更强的兼容性。 在Vue中使用WebSocket可以实现实时更新数据、聊天功…

    Flask 2023年5月16日
    00
  • python flask 多对多表查询功能

    让我为你详细讲解“python flask 多对多表查询功能”的完整攻略。 1. 创建多对多模型 首先,我们需要创建多对多模型。多对多模型通常需要三个表:一个主表,一个辅助表和一个次表。 在Flask中,我们可以使用SQLAlchemy库来创建多对多模型,示例如下: from flask_sqlalchemy import SQLAlchemy db = S…

    Flask 2023年5月16日
    00
  • Python利用第三方模块实现压缩css文件

    下面我会详细讲解如何利用第三方模块实现压缩CSS文件的完整攻略。整个过程分为以下几个步骤: 步骤1:安装需要使用的第三方模块 在Python中,要实现CSS文件的压缩,我们需要使用到csscompressor这个第三方模块,因此首先需要用命令行安装该模块。在命令行中输入以下命令: pip install csscompressor 如无意外,安装将成功完成。…

    Flask 2023年5月16日
    00
  • Flask 使用Gunicorn部署服务介绍

    下面将详细讲解“Flask 使用 Gunicorn 部署服务介绍”的完整攻略。 一、前置条件 在开始部署 Flask 服务之前,需要确保以下软件已经安装在服务器上: Python 3.x pip virtualenv Gunicorn 可以执行以下命令检查软件是否已经安装: python3 –version pip –version virtualenv…

    Flask 2023年5月15日
    00
  • Flask FastCGI(处理Web请求)使用方法详解

    Flask是一款轻量级的Web应用框架,可以用于快速开发Web应用。其中,FCGI是一种处理Web请求的协议,它在承载Web服务器和应用程序之间,提供了可靠的通讯机制。 在实际应用中,我们可以使用Flask FastCGI来将Flask应用部署在Web服务器上,然后通过FastCGI协议与Web服务器进行通讯。 本文将介绍Flask FastCGI的使用方法…

    Flask 2023年3月13日
    00
  • 深入理解python中的ThreadLocal

    深入理解Python中的ThreadLocal 什么是ThreadLocal ThreadLocal是Python中的threading模块提供的一种线程本地存储方式,它可以让每个线程都拥有独立的数据副本,保证了线程之间的数据互相隔离,不会相互干扰。 在多线程处理共享数据时,为了避免并发访问带来的问题,我们通常会采用锁的方式来保护共享数据。但是在使用Thre…

    Flask 2023年5月15日
    00
  • 基于Python Dash库制作酷炫的可视化大屏

    下面是基于Python Dash库制作可视化大屏的完整攻略,分为以下几步: 步骤一:安装Dash库 在Python环境中,安装Dash库可使用以下命令: pip install dash==1.21.0 步骤二:创建Dash应用 导入Dash库中的必要模块: import dash import dash_html_components as html im…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部