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

yizhihongxing

好的。以下是“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日

相关文章

  • 浅谈Python flask框架

    浅谈Python Flask框架 什么是Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架,其主要特点是简单、易学、易扩展,以及具有高度的灵活性。Flask框架的设计借鉴了有关 Ruby 的 Sinatra 框架,其路由系统灵活而强大,支持视图函数、Blueprint、同步、异步等多种方式的实现。 如何使用Flask 安装Flas…

    Flask 2023年5月15日
    00
  • js中值引用和地址引用实例分析

    JS中的值引用和地址引用指的是,在JS中,非基本类型数据(如对象、数组等)的赋值方式存在两种:值传递和引用传递。当使用值传递时,实际上是将变量的值(即数据内容)直接复制给接收变量;而当使用引用传递时,则是将变量的地址(指针)复制给接收变量,两者指向同一块内存空间,从而共享同一份数据。这里通过两个实例来详细讲解这两种传递方式的异同点。 实例1:值传递 假设有两…

    Flask 2023年5月16日
    00
  • flask设置cookie

    Flask中设置cookie可以通过make_response函数来实现。下面是具体的步骤: 步骤一:导入Flask和make_response from flask import Flask, make_response 步骤二:创建Flask app并定义路由 这里我们创建了一个hello函数,并将其绑定在URL路径为/的路由中。 app = Flask…

    Flask 2023年5月15日
    00
  • python flask中动态URL规则详解

    我来为您讲解一下“Python Flask中动态URL规则详解”的完整攻略。 1. 动态URL规则 在 Flask 中,支持通过使用动态 URL 规则的方式来定义动态路由,这样就可以灵活地处理不同的 URL 请求。动态 URL 规则通过在 URL 中加入变量实现。 在 Flask 中,使用 <variable> 语法来标记动态的 URL 变量,然…

    Flask 2023年5月15日
    00
  • Django使用HttpResponse返回图片并显示的方法

    当我们需要在Django框架中展示一张图片或者返回一张图片时,可以使用HttpResponse将图片内容以二进制格式返回给浏览器。下面是展示如何使用HttpResponse返回图片并显示的方法的完整攻略: 方法1:读取图片文件并返回 首先在Django的视图函数中,导入以下模块: python from django.http import HttpResp…

    Flask 2023年5月16日
    00
  • Flask request 对象介绍

    Flask Request 对象介绍 在 Flask 应用中,Request 对象是非常重要的一个对象,因为它提供了访问客户端发送的 HTTP 请求信息的方法和属性。 在本文中,我们将详细介绍 Flask Request 对象的用法和属性。 Request 对象的属性 在 Flask 应用中,Request 对象包含了客户端发送的 HTTP 请求信息,可以通…

    Flask 2023年5月16日
    00
  • Flaks基础之在URL中添加变量的实现详解

    下面我将详细讲解“Flask基础之在URL中添加变量的实现详解”的攻略,主要包括以下内容: 1. 如何在Flask中添加URL变量 在Flask中,我们可以在URL中通过添加变量来动态地生成不同的URL。具体实现方式是将需要带入变量的部分用尖括号(<>)包含起来,例如: @app.route(‘/user/<username>’) d…

    Flask 2023年5月16日
    00
  • 详解Python Flask API 示例演示(附cookies和session)

    详解Python Flask API 示例演示(附cookies和session) 在此文中,我们将为您详细讲解如何使用Python Flask构建API,并附上cookies和session示例。文中包含以下两条示例: 访问API并设置cookies API使用session来记录登录状态 访问API并设置cookies 如果您要访问API并在浏览器中设置…

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