Flask 之 Jinjia2 模板引擎必知必会

模板的作用是内容注入、页面继承与包含,Jinja2 模板引擎为此实现了一整套完善的解决方案。

在使用模板时,所有静态资源应放置在 static 资源目录下,模板页面应放置在 templates 模板目录下。


1.使用模板

首先,在 templates 模板目录下创建一个模板页面文件 value.html。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注入变量</title>
</head>
<body>
    测试内容
</body>
</html>

在视图函数中,调用模板渲染函数便可生成图片。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/value')
def value(username=None):
    return render_template('value.html')


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

2.基本语法

以下是 3 种基本语法,在接下来的代码中将会经常出现。

  • {% ... %} 为控制语句,常用于实现结构控制,定义模板、变量等。
  • {{ ... }} 为表达式语句,常用于输出变量,调用宏观指令、对象函数等。
  • {# ... #} 为注释语句,用于添加代码注解。

3.注入变量

如果只是加载模板,那么网页呈现出的效果其实与静态页面无异。要实现动态网页,需要根据不同的情况显示不同的内容,这个过程便是注入变量。

注入变量的过程通常分两步,首先,在视图函数中注入变量。

@app.route('/value')
@app.route('/value/<string:username>')
def value(username=None):
    return render_template('value.html', username=username)

其次,如果需要将变量显示到页面中,则需要在模板文件中使用表达式语句输出变量,示例代码如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注入变量</title>
</head>
<body>
    {# 在表达式语句中,可使用 or 为变量添加默认值 #}
    <h1>{{ username or '游客'}}</h1>
    <h2> 欢迎使用!!! </h2>
</body>
</html>

4.生成链接

在 Flask 构建的网络中,每一个功能都对应一个视图函数。如果需要将不同的页面联系起来,便需要使用链接标签。在通常情况下,链接标签中所对应的链接可以在模板中使用函数 url_for() 生成。

    <!--  生成静态文件链接  -->
    <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.min.css)}}">
    <!--  生成路由链接  -->
    <a href="{{ url_for('value') }}">
        注入变量演示
    </a>
    <!--  生成路由链接(带参数)  -->
    <a href="{{ url_for('value', username='admin) }}">
        注入变量演示(username=admin)
    </a>

5.控制结构

下面是一个文章列表的视图函数,参数 num 用于控制文章列表(模拟)的文章数量,在生成文章列表之后,将其注入模板中进行显示。

@app.route('/control')
@app.route('/control/<int:number>')
def control(num=0):
    # 此处使用 list 模拟文章列表
    articles = []
    for i in range(1, num+1):
        articles.append({
            'title'   : '文章%d标题' % i,
            'content' : ('文章%d内容' % i) * i,
        })
    return render_template('control.html', num=num, articles=articles)

文章列表页模板(control.html)的代码如下,这里给出了 if 和 for 语句的基本使用方式的简单例子,我们会发现这些语句与 Python 的控制语句相似,同时又类似与 HTML 标签,需要使用 {% end*** %} 语句,对前面的控制语句进行闭合。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>控制结构</title>
</head>
<body>
    <h1>文章列表</h1>
    {% if num <=0 %}
        <h2> 文章数量为 0,没有内容可展示 </h2>
    {% else %}
    {% for article in articles %}
        <h2>{{ article.title }}</h2>
        <p>{{ article.content }}</p>
    {% endfor %}
    {% endif %}
</body>
</html>

6.模板的包含与继承

  • 模板可以用于解决公共内容的冗余问题。例如,将公共部分的内容分离到一个单独的文件,再将模板加载到需要使用的页面中。如果按这种模式进行开发,在修改公共部分内容时,仅需要修改公共部分内容所处的文件,大大缩短了修改各个页面的时间。
  • 在大多数的情况下,模板包含可以实现大部分功能,但是以模板包含的方式进行网站开发,仍然需要在每一个页面中添加包含代码。
  • 而当包含页面的代码也是公共部分时,模板包含便不再适用,此时应引入新的方式进行开发——模板继承。

基准页extends_base.html :{% block %} 语句用于定义可被继承页面修改的区块

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %}
            {# 网页标题 #}
        {% endblock %}
    </title>
    {% block head %}
        {# 网页所引用的样式等静态资源 #}
    {% endblock %}
</head>
<body>
    {% block content %}
        {# 网页内容 #}
    {% endblock %}
    {% block script %}
        {# 网页所引用的 JavaScript 资源 #}
    {% endblock %}
</body>
</html>

前端基准页 extends_bootstrap.html
由于前端统一使用 Bootstrap 框架进行开发,所以需要建立一个前端网页的基准页,以自动引入相关静态资源及加载导航栏。

{% extends 'extends_base.html' %}
{% block head %}
    <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.min.css') }}">
{% endblock %}
{% block script %}
    <script src="{{ url_for('static', filename='jquery.min.js') }}"></script>
    <script src="{{ url_for('static', filename='bootstrap.min.js') }}"></script>
{% endblock %}
{% block content %}
    {% include 'include_nav.html' %}
    <div class="container">
        {% block inner_content %}
            {# 模板页面的正文内容 #}
        {% endblock %}
    </div>
{% endblock %}

包含导航栏模板的完整页面 extends.html

{% extends 'extends_bootstrap.html' %}
{% block title %}模板的继承、包含{% endblock %}
{% block inner_content %}
    <h1>模板的继承</h1>
    <p>可以使复杂的机构变简单。以免在多个页面中引用静态资源。</p>
    <h1>模板的包含</h1>
    <p>可以使复杂的部分单独拆分到某一个文件。</p>
{% endblock %}
{% block script %}
    {# 继承模板内容并添加新内容 #}
    {{ super() }}
    <script>
        // 以下代码用于添加文字动画
        let items = $('h1.p');
        items.hide();
        items.fadeIn(1000);
    </script>
{% endblock %}

添加视图函数

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

7.宏指令

模板的包含、继承也只是从已经编好的模板中加载相应的内容,并将模板内容覆盖到当前页面下。在常见的应用中,会有包含相同文章项目的页面,例如网站首页中和文章列表页面中包含相同的文章项目,此时,文章项目的显示代码就需要在两个页面中重复编写,这种方式操作起来较为繁琐,消耗的资源也较多。此时的文章项目属于公共部分,但在需要多次生成文章项目的情况下,包含和继承便不再适合,宏指令便是此问题的解决方案。

宏命令并不复杂,类似于 Python 中的函数,拥有参数,可以被调用,用于生成网页内容。

视图函数

@app.route('/macro')
@app.route('/macro/<int:num>')
def macro(num=0):
    # 此处使用 list 模拟文章列表
    articles = []
    for i in range(1, num+1):
        articles.append({'title'   : '文章%d标题' % i,
                         'content' : ('文章%d内容' % i) * i,
                         })
    return render_template('macro.html',
                           num      = num,
                           num_prev = num - 1,
                           num_next = num + 1,
                           articles = articles)

模板文件 macro.html

{% extends 'extends_bootstrap.html' %}
    {# 宏指令可以定义在单独的文件中,然后被其他文件引入 #}
{% import 'macro_define.html' as macro %}
{% block title %}
    宏指令
{% endblock %}
{% block inner_content %}
{# 宏指令的使用方法类似于函数 #}
{{ macro.article_list(articles, num) }}
{% if num > 0 %}
    <a href="{{ url_for('macro', num=num_prev) }}" class="btnbtn-primary">-1</a>
{% endif %}
    <a href="{{ url_for('macro', num=num_next) }}"class="btn btn-primary">+1</a>
{% endblock %}

宏指令模板文件 macro_define.html

{% macro article_item(title, content) %}
    <h2>{{ title }}</h2>
    <p>{{ content }}</p>
{% endmacro %}
{% macro article_list(articles, article_num) %}
{% if article_num <= 0 %}
    <h2> 文章数量为0,没有内容可展示。</h2>
{% else %}
{% for article in articles %}
    {{ article_item(article.title, article.content) }}
{% endfor %}
{% endif %}
{% endmacro %}

8.注册全局对象

在某些特殊的模板中,可以通过直接调用函数来获取数据。但在被继承的模板中,如果需要调用某个固定的函数,通常需要在每一个使用被继承模板的视图函数中注入相应的函数(变量),但这显然不是推荐的操作方法。这时,需要注册全局对象。

模板文件 global.html

{% extends 'extends_bootstrap.html' %}
{% block title %}
    注册全局对象
{% endblock %}
{% block inner_content %}
    {#  此处将数字列表输出到页面中 #}
    {{ global_test(10) }}
{% endblock %}

全局对象使用示例

# 注册全局对象的类型不限,可以是任何类型(函数亦可)
def range_list(x):
    return list(range(x))
# 将函数注册到全局对象中
app.add_template_global(range_list, 'global_test')

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

9.变量过滤器

变量过滤器用于对注入变量进行简单处理。在模板页面注入变量时,只需要在变量后面添加 | 即可调用过滤器方法。

常见的过滤器基本用法

{#  字符串的首字母大写,其他小写 #}
<p>{{ 'test' | capitalize }}</p>
{#  字符串格式化 #}
<p>{{ '你好 %s ,这里是 %s 。' | format(request.remote_addr, request.path) }}</p>
{#  字符串转小写 #}
<p>{{ 'TESTTEST' | lower }}</p>
{#  字符串转大写 #}
<p>{{ 'testtest' | upper }}</p>
{#  字符串替换 #}
<p>{{ 'Hello Test' | replace('Test', 'World') }}</p>
{#  翻转字符串 #}
<p>{{ '?uoy era woH' | reverse }}</p>
{#  清除字符串首尾多余的空格 #}
<p>{{ '    这 是 一 段 测 试 内 容    ' | trim }}</p>
{#  截断字符串 #}
<p>{{ '这 是 一 段 测 试 内 容' | truncate(8) }}</p>
{#  计算字符串中单词的数量 #}
<p>{{ 'How are you?' | wordcount }}</p>
{#  四舍五入 #}
<p>{{ 1.3 | round }}</p>
<p>{{ 1.5 | round }}</p>
{#  为未定义的变量提供默认值 #}
<p>{{ undefined | default('默认值') }}</p>
{#  保留HTML 实体,不对内容进行转义 #}
<p>{{ '<script>alert("这里是safe 变量过滤器演示,请不要在不安全的数据中使用,否则用户将会受到攻击;就如这个弹框(恶意代码)。")</script>' | safe }}</p>
{#  对HTML 实体字符进行转义 #}
<p>{{ '<script>alert("test")</script>' | escape }}</p>
{#  清除字符串中包含的HTML 标签 #}
<p>{{ '<script>alert("test")</script>' | striptags }}</p>
{#  将对象转换为JSON 格式,通常在<script> 标签对中使用 #}
<script>
    let data = {{ {'name': request.remote_addr} | tojson }};
    alert("你好呀!" + data["name"]);
</script>
{#  对内容进行URL 编码 #}
<a href="?keyword={{ '这 是 一 段 测 试 内 容' | urlencode }}"> 链接</a>

自定义过滤器

# 自定义一个转换时间的过滤器
def convert_time(t):
    return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
# 注册模板变量过滤器
app.add_template_filter(convert_time)
Python实战:模板引擎Jinja2使用教程 本文详细介绍了Python中Jinja2模板引擎的使用方法,包括安装、基本语法、模板继承、过滤器、宏、上下文处理器、环境配置、测试、全局函数、模板加载器、模板缓存、异常处理等方面。 阅读详情

相关推荐

【jinjia2 详细教程、完整语法文档】

Jinja2 语法摘要 Jinja2 是一个功能强大的 Python 模板引擎,提供: 基础语法:{{变量}}输出、{#注释#}、{%控制结构%} 控制结构: 条件判断:if/elif/else 循环:for(含loop变量) 行内三元运算:{{ "A" if x else "B" }} 过滤器:|lower、|upper等链式处理,支持自定义 宏:可重用模板片段,支持参数 模板继承:extends和block实现布局复用,super()调用父模板 高级特性:

放飞自我的coder 1675

【Flask 系统性学习笔记 4】Jinjia2模版和语法

详细介绍Jinjia2模版和语法,包含大量示例代码,方便读者理解。

PengXing_Huang的博客 3978

Flask+Jinjia2+Sqlalchemy的MVC框架

框架介绍采用Flask,模板引擎jinjia2,数据库orm用Sqlachemy结构介绍路由默认get, post, delete, put方法#四个参数分别是,url,View类名,control实例,允许的请求方式 urls = [ ("user", User, user_ctl, ["GET", "POST"]), ] for i in restful_urls.urls: _

moses的博客 858

Jinjia2-语法入门

Jinjia2 语法 控制结构 {% %} 变量取值 {{ }} 注释 {# #} 变量 读取变量 {{ parameter }} 读取字典 {{ parameter[‘key’] }} {{ parameter.key }} 读取数组 {{ parameter[3] }} 读取对象 {{ object.something() }} 过滤器 变量可以通过“过滤器”进行修改,过滤器可以理解为是Jinja2里面的内置函数和字符串处理函数。 常用过滤器如下: abs(value):返回一个数值的绝对值。

a4208xiaojin的博客 3580

(十一)Flask模板引擎jinja2

(十一)Flask模板引擎jinja2

孤寒者的博客 2万+

Linux蓝牙开发实战:5分钟搞懂BlueZ与D-Bus通信原理(附D-Feet调试技巧)

本文深入解析Linux下BlueZ蓝牙协议栈与D-Bus通信的核心机制,提供实战开发指南。通过D-Bus对象模型、信号订阅等关键技术点的详细讲解,配合D-Feet工具的高效调试技巧,帮助开发者快速掌握蓝牙设备管理与性能优化方法,提升物联网开发效率。

3a9bq4r8t2y的博客 330

Flask基本教程以及Jinjia2模板引擎简介

上下文:其实就是模板中定义的变量,我们渲染时会将上下文传递给模板:template.render(context) ,而我们嵌套其他模板时,也可以将它们中的上下文包含进来,这样在当前模板中也可以使用被嵌套模板中的上下文。过滤器就是函数,把当前的变量传入过滤器,过滤器根据自己的功能对变量进行相应的处理,再返回对应的值,并将结果渲染到网页中,起到了数据处理的作用。django中的模板引擎,就具备模板的继承和包含功能。同样,jinjia2,也具备这样的功能,起到了模板复用、模块化开发的效果。

qq_34045989的博客 1292

从入门到实战:rkhunter(Rootkit猎手)在Linux服务器安全运维中的部署与自动化监控

本文详细介绍了rkhunter(Rootkit猎手)在Linux服务器安全运维中的部署与自动化监控方法。从Rootkit的危害性入手,讲解了rkhunter的安装、配置及实战应用,包括如何建立基准、优化定时任务方案以及智能告警处理。通过多级过滤脚本和系统级联动,帮助运维人员高效识别和应对Rootkit威胁,提升服务器安全性。

weixin_28715953的博客 240

Flask中的Jinjia2的使用

jinja2模板引擎 模板 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取 使用真实值替换变量,再返回最终得到的字符串,这个过程称为“渲染 Flask是使用Jinja2这个模板引擎来渲染模板 使用模板的好处 视图函数只负责业务逻辑和数据处理(业务逻辑方面) 而模板则取到视图函数的数据结果进行展示(视图展示方面) 代...

Wollens Blogs 2244

Unity海洋渲染实战:Ceto Ocean System核心原理与高级应用指南

实时水面渲染是计算机图形学中的重要课题,涉及波浪模拟、光照交互和着色器编程等核心技术。其原理通常基于物理模型,如使用Gerstner波模拟规则海浪,或通过快速傅里叶变换(FFT)处理频谱数据生成随机海面。这些技术的价值在于能以可控的性能开销,在游戏中实现具有体积感、反射和折射效果的真实水体。在开放世界、海战模拟等应用场景中,专业的海洋系统如Ceto Ocean System,通过模块化架构整合了波浪生成、动态网格和渲染管线,为开发者提供了完整的解决方案。本文深入探讨了其双引擎波浪系统和多层渲染结构,并分享了

weixin_29002595的博客 279

跨域问题 - 其他 method 都没有跨域问题,只有delete有跨域的问题

跨域的配置等一切正常,GETPOSTPUTOPTIONS都可以正常访问, 唯独有一个DELETE有跨域的问题, 经过排查发现这个DELETE请求有body, 经过一系列排查, 发现头部有一个不太正常的值是为了避免浏览器的影响, 直接在 postman 中新建一个请求, 竟然也有跨域的问题, 后来把的值改成了请求就可以正常调用了.

galoiszhou的博客 528

Python flask jinjia2配置使用

本文介绍了Flask框架与Jinja2模板引擎的集成使用。主要内容包括:1) Flask基础配置和模板目录结构;2) Jinja2基本语法如变量渲染、控制结构和模板继承;3) 静态文件管理与表单处理;4) 高级功能包括宏定义、过滤器、全局变量和上下文处理器;5) 项目组织建议和常见问题排查。文章通过示例代码展示了如何实现数据渲染、模板复用和安全防护,为开发者提供了从基础到进阶的Jinja2模板开发指南。

onlymscn的博客 1201

七星棋牌顶级运营产品全开源修复版源码教程:6端支持,200+子游戏玩法,完整搭建指南(含代码解析)

让您从源码下载到本地运行一步到位!此外,文中还将附带详细代码解析与操作步骤,即便没有开发经验,也能轻松完成二开与定制。数据库是棋牌游戏中极为关键的组成部分,用于存储用户信息、乐豆余额、游戏记录、提现申请等数据。以下是部分核心数据表结构示例,便于存储用户信息与游戏记录。AI模块能够控制游戏中的胜率,常用于调节玩家体验。防沉迷功能旨在限制未成年人游戏时间。的完整搭建流程,特别适合。首先,获取七星棋牌源码。本教程将为您详细讲解。

aa2031171的博客 7784

flask与jinjia2入门讲解

1. 什么是 Flask?Flask 是一个轻量级的 Web 应用框架,使用 Python 编写。它旨在通过简洁的核心功能和灵活的扩展机制,帮助开发者快速构建 Web 应用。2. Flask 的特点轻量级:核心功能精简,没有强制性的依赖关系。灵活性:支持多种数据库、模板引擎和认证机制。扩展性强:通过丰富的第三方扩展(如 Flask-SQLAlchemy、Flask-Login 等),可以轻松添加所需功能。3. 核心组件路由系统:通过装饰器定义 URL 路由。请求处理。

鸭梨的博客 953

AST实战:解密Akamai混淆JS代码的完整流程

本文详细解析了如何使用AST技术解密Akamai混淆的JS代码,包括定位关键代码、AST解混淆实战步骤及常见问题解决方案。通过实际案例演示了从混淆代码到清晰逻辑的完整处理流程,并提供了工具推荐和法律合规建议,帮助开发者有效应对反爬虫技术。

weixin_33725722的博客 315

在 SAP HANA 里为视图创建 Analytic Privilege,真正把同一份数据按角色切开

摘要:本文介绍了SAP HANA中基于业务角色的动态数据权限控制方法。通过Analytic Privilege技术,可以在同一视图上为不同角色设置不同的数据访问范围,实现行级安全控制。核心机制包括:1) 创建带有STRUCTURED PRIVILEGE CHECK的视图;2) 建立授权对象和用户映射表;3) 开发条件提供过程动态生成过滤条件;4) 创建结构化权限对象绑定条件提供器。这种设计使权限规则与业务数据解耦,便于维护变更,适合销售区域、财务数据等多角色访问控制场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2392

Flask的Jinjia2模板

简单说: - 业务逻辑 python代码部分 - 表现逻辑 HTML代码部分 这两个部分最好解耦,不然很难维护。 渲染 使用模板,用运行时真实的值替换模板中的可变部分,生成最终的响应字符串,这样的过程叫渲染。 Flask使用Jinjia2模板引擎 1. 模板文件 模板文件保存在 templates子文件夹中,Flask会在这里寻找模板。 举个例子,编写以下2个html模板文件

guanchunsheng的博客 1273

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在Flask中使用Jinjia2

简单来说,在web应用开发中,为了实现前后端的解耦分离前后端逻辑,就可以将表现逻辑分离出来交由模板通过模板引擎来实现。其实模板就是包含静态与动态内容的网页内容。Jinja2是一种现代的、对设计人员友好的Python模板语言。具有快速广泛使用和安全的特性。所谓渲染,其实就是向网页中加载静态内容及动态内容值的过程。

zheshiyangyang的博客 967

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

qq_31600443的博客 995

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

flask中jinjia2的学习

Jinja2:是Python的Web项目中被广泛应用的模板引擎,是由Python实现的模板语言,Jinja2 的作者也是 Flask 的作者。他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。jinja2之所以被广泛使用是因为它具有以下优点:1、相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等。2、相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑。

Ywx_csdn的博客 352

python学习笔记(了解Flask、jinjia2引擎)

什么是Flask 安装 pip install flask Flask是python编写的, Web应用框架;微内核的web框架; —小型网站 Django:全能型框架; — 大型网站(ERP) # 1. 导入Flask类 from flask import Flask app = Flask(__name__) # 实现主页 @app.route('/') def index(): ...

mkgdjing的博客 3253

Flask项目开发中jinjia2 {{ }}解析带有换行符的字符串出错

在flask项目中,使用jinjia2语法{{ 变量名 }} 可以动态的给前端赋值,于是我在js代码里面这么写 $('#症状').val("{{ entry.症状 }}"); 似乎我能够得到entry.症状的值,但是页面却出错了 加载不出内容了,检查一下 可以看到是传入的数据中有换行符,但是jinjia2解析是原封不动地插入内容,字符串的两个双引号之间隔了很多行,所以识别不出来,悲剧了 试图采用jinjia2的方式解决,最后发现js中有反引号标识 ` 可以标记带换行符的字符串 只需将代码改成这样 $(

dark的博客 1491

Jinjia2模板引擎学习笔记

Jinjia2 模板引擎 形式最简单的Jinjia2模板引擎就是一个包含响应文本的文件。 1渲染模板 默认情况下,flask在应用中的templates子目录里面寻找模板。 flask提供的render_template()函数吧Jinjia2模板引擎集中到了应用中。这个函数的第一个参数是文件的关键字参数,随后的参数是键值对,表示模板中变量对应的具体值。 2变量 {{变量}}结构表示一个变量,这是...

Tony_20的博客 525

Flask Jinja2模板引擎

模板 在前面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。而模板引擎的作用是承担视图函数的了一个作用,即返回响应内容。 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取; 使用真实值...

PininQ的博客 3054

Flask学习——Jinja2模板引擎

   渲染模板    模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求上下文才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用了一个Jinja2的模板引擎。如下是一个简单的仅包含响应文本的文件:&lt;h1&gt;Hello World!&lt;/h1&gt;如下是一个包含了变量的动态部分的响应文本的文件:&lt...

sjc_1024的博客 804
上一篇: 5. seaborn-构建结构化多图网络
下一篇: Flask 之 SQLAlchemy
沉住气CD
博客等级 码龄9年 547粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值