在Flask中使用Jinjia2

目录

一.模版引擎

1.1什么是模板

1.2什么是Jinja2

1.3什么是模板渲染

二.Jinja2语法

2.1传递一个参数

2.2传递列表型参数

2.3传递所有参数

2.4分隔符

 2.5if

2.6for

2.7set

2.8with

三.模版插入与模版继承

3.1include模版插入

3.2extends模版继承

一.模版引擎

Flask使用Jinja2引擎来渲染模版

1.1什么是模板

简单来说,在web应用开发中,为了实现前后端的解耦分离前后端逻辑,就可以将表现逻辑分离出来交由模板通过模板引擎来实现。

其实模板就是包含静态与动态内容的网页内容。

1.2什么是Jinja2

Jinja2是一种现代的、对设计人员友好的Python模板语言。具有快速广泛使用安全的特性。

1.3什么是模板渲染

所谓渲染,其实就是向网页中加载静态内容动态内容值的过程。

二.Jinja2语法

2.1传递一个参数

app.py

@app.route('/')
def hello_world():content = "首页内容"return render_template('index.html', content=content)

index.html

<body><h1>{{ content }}</h1>
</body>
  • 通过{{ var }}使用传来的参数值

2.2传递列表型参数

app.py

@app.route('/')
def hello_world():content = ["1","2","3","4","5"]return render_template('index.html', content=content)

index.html

<head><meta charset="UTF-8"><title>{{ title }}</title>
</head>
<body>{{% for item in content %}}<p>{{item}}</p>{{% endfor %}}
</body>

2.3传递所有参数

@app.route('/')
def hello_world():title = "首页"content = "首页内容"return render_template('index.html', **locals())
  • 使用**locals()所有参数传递给了模板,然后选择性使用

2.4分隔符

{{ var }}是不同于html原生语法的东西

{{}}分隔符Jinja2中的分隔符有好几个:

{% ..... %} 用于声明

{{ .... }} 用于打印表达式,使用变量等

{ # .... # } 用于模版注释

# .... ## 对语法的简化

 2.5if

模板语法

{% if condition %}do something
{% elif condition %}do something
{% else %}do something
{% endif %}

2.6for

模板语法

{% for item in iteratable %}do something
{% endfor %}

2.7set

set用于在模版中设置变量,直接在set中定义代码的变量,如果不用with修饰,默认是全局变量

{% set name = '鞠婧祎' %}
<span>{{name}}</span>

2.8with

with用于创建一个局部作用域,在这个局部作用域使用set定义的变量仅在with中有效,不会污染全局

{% with %}{% set name = '鞠婧祎' %}<span>{{name}}</span>
{% endwith %}

上面的set也可以直接写进with中,格式如下:

{% with name = '鞠婧祎' %}<span>{{name}}</span>
{% endwith %}

三.模版插入与模版继承

3.1include模版插入

include用于向某个HTML指定位置中插入一个模板

PS:“include只能插入,不能修改插入的内容!!

模板语法

{% include  template_name%}

 例如

header.html

<!DOCTYPE html>
<html>
<head><title>My Website</title>
</head>
<body><header><h1>Welcome to My Website</h1></header>

footer.html

    <footer><p>&copy; 2024 My Website</p></footer>
</body>
</html>

index.html

{% include 'header.html' %}
<main><p>This is the content of the homepage.</p>
</main>
{% include 'footer.html' %}

可以看到,include只能插入一个模板,并不能对模板进行选择性的修改,因此局限性较大

3.2extends模版继承

extends用于实现模板继承子模板可以继承父模板的内容,并且可以修改。

在使用extends时,可以使用block指令圈选子模板可以修改的范围

base.html(父模板):

<!DOCTYPE html>
<html>
<head><title>{% block title %}My Website{% endblock %}</title>
</head>
<body>{% block content %}{% endblock %}<footer><p>&copy; 2024 My Website</p></footer>
</body>
</html>

home.html(子模板):

{% extends 'base.html' %}{% block title %}Homepage - My Website{% endblock %}{% block content %}<header><h1>Welcome to My Website</h1></header><main><p>This is the content of the homepage.</p></main>
{% endblock %}
  • 如果我们想修改父模板的内容,且想保留父模板的内容,可以使用:“{{ super() }}”来保留父模板内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.8k star!一款小而美的开源物联网操作系统:RT-Thread

介绍 RT-Thread是一款主要由中国开源社区主导开发的开源实时操作系统&#xff08;RTOS&#xff09;。它不仅是一个实时操作系统内核&#xff0c;也是一个完整的应用系统&#xff0c;包含了实时、嵌入式系统相关的各个组件&#xff0c;如TCP/IP协议栈、文件系统、libc接口、图形…

【算法专题--链表】删除排序链表中的重复元素 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 四、总结与提炼 五、共勉 一、前言 删除排序链表中的重复元素这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&#xff0c;通常在面试中&#xff0…

记录一个flink跑kafka connector遇到的问题

【报错】 D:\Java\jdk1.8.0_231\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2022.2.3\lib\idea_rt.jar56647:D:\Program Files\JetBrains\IntelliJ IDEA 2022.2.3\bin" -Dfile.encodingUTF-8 -classpath D:\Java\jdk1.8.0_231\jre\lib\cha…

手机照片免费数据恢复软件EasyRecovery2024免费版下载

大家好&#xff01;今天我要给大家推荐一款非常棒的软件——EasyRecovery。相信大家都知道&#xff0c;电脑中的重要文件一旦丢失&#xff0c;对我们的工作和学习都会产生很大的影响。 而EasyRecovery软件就是专门解决这个问题的利器&#xff01;它能够帮助我们快速、有效地恢…

【CSS in Depth2精译】1.1 层叠

CSS 本质上就是声明规则&#xff0c;并让这些特定的规则在各种情况下生效。一个类添加到某个元素上&#xff0c;则应用这个类包含的这一些样式&#xff1b;元素 X 是元素 Y 的一个子节点&#xff0c;则应用另一些样式。浏览器于是根据这些规则&#xff0c;判定所有样式生效的具…

最长不下降子序列LIS详解

最长不下降子序列指的是在一个数字序列中&#xff0c;找到一个最长的子序列&#xff08;可以不连续&#xff09;&#xff0c;使得这个子序列是不下降&#xff08;非递减&#xff09;的。 假如&#xff0c;现有序列A[1&#xff0c;2&#xff0c;3&#xff0c;-1&#xff0c;-2&…

【Android】三种常见的布局LinearLayout、GridLayout、RelativeLayout

【Android】三种常见的布局LinearLayout、GridLayout、RelativeLayout 在 Android 开发中&#xff0c;布局&#xff08;Layout&#xff09;是构建用户界面的基础。通过合理的布局管理&#xff0c;可以确保应用在不同设备和屏幕尺寸上都能有良好的用户体验。本文将简单介绍 And…

Go微服务框架Kratos中makefile命令的使用方法及报错处理

运用 kratos 微服务框架开发项目时&#xff0c;可以使用提供的 makefile 中的命令自动且快速生产相关代码&#xff0c;提高开发效率。 krotos中makefile文件内容如下&#xff1a; GOHOSTOS:$(shell go env GOHOSTOS) GOPATH:$(shell go env GOPATH) VERSION$(shell git descri…

java程序什么时候需要在运行的时候动态修改字节码对象

一、java程序什么时候需要在运行的时候动态修改字节码对象 我认为有两种场景&#xff0c;一种是无法修改源代码的时候&#xff1b;另外一种是功能增强的时候。 1、无法修改源代码 举个例子&#xff0c;java程序依赖的第三方的jar包中发现了bug&#xff0c;但是官方还没有修复…

JS直接赋值复选框value无法显示

citySelect.value city这样会因为select复选框标签中没有对应value为city的值的option而无法显示。 解决办法&#xff1a; const cityHtml cityRes.list.map(v > {return <option value"${v}">${v}</option>}).join()citySelect.innerHTML <op…

【ai】triton-inference-server本地运行

官方地址下载源码 triton-inference-server/server zhangbin@LAPTOP-Y9KP MINGW64 /x/02_triton_inf_server $ git clone -b r24.05 https://github.com/triton-inference-server/server.gitCloning into server... remote: Enumerating objects: 46395, done. remote: Counti…

工程设计问题-步进锥滑轮问题

该问题的主要目标是用5个变量使4阶锥皮带轮的重量最小&#xff0c;其中4个变量是皮带轮每个台阶的直径&#xff0c;最后一个变量是滑轮的宽度。该问题包含11个非线性约束&#xff0c;以保证传动功率必须为0.75马力。 Abhishek Kumar, Guohua Wu, Mostafa Z. Ali, Rammohan Mall…

启动mysql 3.5时出现 MySql 服务正在启动 . MySql 服务无法启动。

有可能是端口冲突 netstat -ano | findstr :3306运行这段代码出现类似&#xff1a; 可以看到端口 3306 已经被进程 ID 为 6284 的进程占用。为了启动新的 MySQL 服务&#xff0c;我们需要停止这个进程或更改新服务的端口&#xff1a; 1、终止进程 taskkill /PID 6284 /F2、确…

【计算机毕业设计】基于Springboot的车辆管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

贷款投资决策和常用财务函数

前段时间上了一门excel操作的课&#xff0c;本文结合其中介绍财务函数以及投资决策分析相关的部分&#xff0c;对贷款中的现金流计算进行深入的分析。 以等额本息产品为例进行实操计算&#xff0c;假设某产品本金12000元&#xff0c;期限12&#xff0c;IRR利率24%。每期还款113…

项目:双人五子棋对战-对战模块(6)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 当玩家进入到游戏房间后, 就要开始一局紧张而又刺激的五子棋对战了, 本文将就前端后端的落子与判断胜负的部分作详细讲解. 模块详细讲解 约定前后端交互的接口 首先是建立连接后, 服务器需要生成一些游戏的初始信息(可…

c语言——扫雷游戏(简易版)

目录 前言游戏设计 前言 什么是扫雷游戏&#xff1f; 游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子&#xff0c;同时避免踩雷&#xff0c;踩到一个雷即全盘皆输。 这个游戏对于c语言的初学者来说难度还是挺大的&#xff0c;那我就实现一个初学者也能快速学…

黄仁勋最新建议:找到一门技艺,用一生去完善、磨炼!

“你可能会找到你的英伟达。我希望你们将挫折视为新的机遇。” 黄仁勋职业生涯中最大的教诲并非来自导师或科技公司 CEO&#xff0c;而是来自他在国际旅行时遇到的一位园丁。 近日在加州理工学院毕业典礼上发表演讲时&#xff0c;黄仁勋向毕业生分享了自己在日本京都的小故事。…

2012-2022年各省新质生产力指数数据(含原始数据+结果)

2012-2022年各省新质生产力指数数据&#xff08;含原始数据结果&#xff09; 1、时间&#xff1a;2012-2022年 2、指标&#xff1a;province、year、平均受教育年限、劳动者人力资本结构、高等院校在校学生结构、人均GDP元、在岗职工工资&#xff1a;元、三产从业人员比重、机…

各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?

2023简直被人工智能相关话题席卷的一年。关于机器学习算法的热度&#xff0c;也再次飙升&#xff0c;网络上一些分享已经比较老了。那么今天借着查询和学习的机会&#xff0c;我也来浅浅分享下目前各种机器学习算法及其应用场景。 为了方便非专业的朋友阅读&#xff0c;我会从算…