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日

相关文章

  • 如何使用Cython对python代码进行加密

    使用Cython对Python代码进行加密,通常是通过将Python代码编译为Cython模块,该模块可以加密并保护您的Python代码。下面我们来一步步了解如何使用Cython对Python代码进行加密。 第一步: 安装Cython 在开始使用Cython编译Python代码之前,您需要先安装Cython。您可以使用pip来安装Cython,可以在命令行界…

    Flask 2023年5月16日
    00
  • python优雅实现代码与敏感信息分离的方法

    当我们在编写Python代码时,常常需要使用一些敏感信息,例如数据库密码、API密钥等,这些信息是需要保密的,不能直接写在代码中。同时,我们也希望代码既能保证安全性,又要简洁优雅,不臃肿。本文将介绍一种优雅实现代码和敏感信息分离的方法,以及两个示例说明。 方法介绍 我们可以使用环境变量的方式来实现代码和敏感信息的分离。具体做法如下: 首先,在我们的Pytho…

    Flask 2023年5月16日
    00
  • 打包FlaskAdmin程序时关于static路径问题的解决

    将FlaskAdmin程序打包成一个单独的可执行文件,可以极大地方便运行和分发。但是在打包的过程中常常会遇到static路径的问题。下面是关于解决static路径问题的攻略。 问题描述 在FlaskAdmin程序中,我们通常需要在后台管理页面中使用静态资源。在开发过程中,我们可以使用相对路径(如”./static/js/myscript.js”)来指定静态资…

    Flask 2023年5月16日
    00
  • Python flask-script 模块详解

    Python Flask-Script 模块详解 简介 Flask-Script 是 Flask 的扩展模块,其提供了一些方便的命令行脚本的功能。可以使用 Flask-Script 快速创建和管理 Flask 项目,其中常用的功能有: 启动服务器 创建数据库 初始化数据 创建管理员账户等 安装 使用 pip 安装 Flask-Script: $ pip in…

    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
  • Flask框架中的session设置详解

    Flask是一个非常流行的Python Web框架,它提供了许多功能来帮助Web开发者构建高效和可维护的Web应用程序。其中,session是Flask框架提供的一个功能强大的机制,来实现对客户端的状态跟踪。 本文将详细介绍Flask框架中session的设置和使用方法。 什么是session? Session是一种保存在服务器上的对象,用于存储跨请求的信息…

    Flask 2023年5月15日
    00
  • Nginx如何根据前缀路径转发到不同的Flask服务

    根据您的要求,这里为您详细讲解“Nginx如何根据前缀路径转发到不同的Flask服务”的完整攻略。 概述 Flask是一个轻量级的Python web框架,在一些简单的web应用中很受欢迎。而Nginx是一款高性能的HTTP和反向代理服务器。Nginx和Flask的结合可以实现高并发、高可用性的web服务。在某些场景中,我们会需要在同一台服务器上部署多个Fl…

    Flask 2023年5月16日
    00
  • Flask框架运用Axios库实现前后端交互详解

    这里是”Flask框架运用Axios库实现前后端交互详解”的完整攻略。 简介 在网页开发中,前后端分离已经成为了一种趋势。而实现前后端的交互则是非常重要的一部分。Axios库是一个基于Promise的HTTP客户端,可以用在浏览器和Node.js中。本文将详细介绍如何在Flask框架中运用Axios库实现前后端交互。 前提条件 在开始之前,需要确保以下条件满…

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