Flask基础2-Jinja2模板
目录
1.介绍
2.模板传参
1.变量传参
2.表达式
3.控制语句
4.过滤器
5.自定义过滤器
6.测试器
7.块和继承
flask基础1
1.介绍
Jinja2:是Python的Web项目中被广泛应用的模板引擎,是由Python实现的模板语言,Jinja2 的作者也是 Flask 的作 者。他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。 jinja2之所以被广泛使用是因为它具有以下优点:
1、相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等。
2、相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑。
3、相对于Django模板,jinja2性能更好。
4、Jinja2模板的可读性很棒。 要渲染一个模板,通过 render_template 方法即可。
2.模板传参
在渲染前端页面的时候,有时候我们要将后端的一些数据渲染到前端页面,那么在使用render_template渲染模板的时候,可以传递关键字参数,前端页面直接使用,如果是多个参数就写成字典或者列表的形式传递到前端
1.变量传参
传参语法:在前端页面中{{变量名}}两个大括号中写变量名即可
逻辑语句(if else for之类的)使用{% if%}这个符号
from flask import Flask
from flask import render_template,redirect,requestapp=Flask(__name__)data={'name':'zhangsan','age':18,'weight':100}
datas={'a':{'name':'lisi','age':19,'weight':101},'b':{'name':'wangwu','age':20,'weight':110},'c':{'name':'zhangsan','age':18,'weight':100}
}@app.route('/index')
def index():return render_template('index.html',**datas)if __name__ == '__main__':app.run(debug=True)
传入data的写法

传入datas的写法:

2.表达式
其实就是{{表达式}},表达式可以是运算表达式{{1+1}},可以是比较表达式{{age>18}}
还可以是函数{{ function() }}
3.控制语句
主要用到的是:条件控制语句if和else,循环语句for
条件控制语句要用{% if %},并且在结束的时候要加上{% endif %},{% endfor %}
{% if name=='zhangsan' %}<h1>这里是法外狂徒的地方,其他人不能来</h1>{% elif name=='lisi' %}<h1>这里是李四的地盘</h1>{% else %}<h1>其他人的根据地</h1>{% if age>18 %}<h1>成年人</h1>{%endif%}{# 循环语句 #}{% for name in datas %}我的名字是:{{ name }},我今年:{{ age }},我体重为:{{ weight }}{% endfor %}
3.过滤器
就是一个转换函数,将传入的变量传入到中国转换函数中,在使用这个转换函数的返回值作为渲染变量,语法:{{ 变量名 | 转换函数 }}
常用的有:
safa:渲染时值不转义
capitalize:把值的首字母转换成大写,其他的小写
lower:所有字母小写
upper:所有字母大写
title:把值的每个单词首字母大写
trim:去除首位空格
striptags:渲染之前把值的所有HTML标签删除
escape:不转义HTML语法
join:替换字符串的值
replace:默认对数字进行四舍五入,也可以用参数进行控制
int:把值转成整形
<p>{{ name | upper }}</p><p>{{ name | trim }}</p><p>{{ "HELLO WROLD" | lower }}</p><p>{{ '<h1>name<h1>' | safe }}</p><p>{{ '<h1>name<h1>' | escape }}</p>
其实python基础中用到的内置函数这里基本都有
<p>{{ age | round }}</p><p>{{ age | abs }}</p><p>{{ age | length }}</p><p>{{ age | sum }}</p><p>{{ age | sort }}</p>
4.自定义过滤器
使用函数写一个自己想要的函数,然后将这个函数传入到flask中存放过滤器的地方,那么你这个函数就是过滤器了
# 第一种方法
def get_last_num(num):return num[-1]app.jinja_env.filters['last_name']=get_last_num# 第二种方式,使用过滤器函数的装饰器
@app.finalize_request()
def get_last_num(num):return num[-1]
然后就可以在前端页面中使用这个过滤器了
5.测试器
和过滤器差不多,但是测试器是放在结构语句中判断的
{% if name is lower %}<h2>"{{ name }}" 是小写的.</h2>
{% endif %}
jinja2中的内置的测试器:
{# 检查是否所有字符都是大写 #}
{% if name is upper %}<h2>"{{ name }}" 所有字母大写.</h2>
{% endif %}
{# 检查变量是否为空 #}
{% if name is none %}<h2>name值是空的.</h2>
{% endif %}
{# 检查变量是否为字符串,也可以用number检查是否为数值 #}
{% if name is string %}<h2>{{ name }} name是字符串.</h2>
{% endif %}
自定义测试器
def is_9num(num):mox=r'\d{9}'return re.match(mox,num)
app.jinja_env.tests['is_9num'] = is_9num@app.template_test('is_9num')
def is_9num(str, suffix):return str.lower().startswith(suffix.lower())
6.块和继承
这个是为了解决代码重用的,比如首页,页脚,导航栏之类的
父模板中写重复的代码块
子模板中继承父模板的内容后来填充,转义父模板中的内容就不用重复写了
继承的时使用关键字extends
标签定义的内容写到{% block 块变量名称 %} {% endblock %}中,举个栗子:
父模板(father.heml)内容:
{% block top %}页首内容
{% endblock top %}{% block centent %}留给子模板写的标签
{% endblock centent%}{% block bottom %}页脚内容
{% endblock bottom%}
子模板中写:
{% extend 'father.html' %}
{% block content %}需要填写的内容
{% endblock content %}
相关文章:
Flask基础2-Jinja2模板
目录 1.介绍 2.模板传参 1.变量传参 2.表达式 3.控制语句 4.过滤器 5.自定义过滤器 6.测试器 7.块和继承 flask基础1 1.介绍 Jinja2:是Python的Web项目中被广泛应用的模板引擎,是由Python实现的模板语言,Jinja2 的作者也是 Flask 的作 者。他的设计思想来源于Django的模…...
Serverless 使用OOS将http文件转存到对象存储
目录 背景介绍 系统运维管理OOS 文件转存场景 前提条件 实践步骤 附录 示例模板 背景介绍 系统运维管理OOS 系统运维管理OOS(CloudOps Orchestration Service)提供了一个高度灵活和强大的解决方案,通过精巧地编排阿里云提供的OpenAPI…...
AcWing 477:神经网络 ← 拓扑排序+链式前向星
【题目来源】https://www.acwing.com/problem/content/479/【题目描述】 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。 对神经网络的研究…...
鲁教版八年级数学下册-笔记
文章目录 第六章 特殊平行四边形1 菱形的性质与判定2 矩形的性质与判定3 正方形的性质与判定 第七章 二次根式1 二次根式2 二次根式的性质3 二次根式的加减二次根式的乘除 第八章 一元二次方程1 一元二次方程2 用配方法解一元二次方程3 用公式法解一元二次方程4 用因式分解法解…...
Web前端栅格:深入解析与实战应用
Web前端栅格:深入解析与实战应用 在Web前端开发中,栅格系统是一种重要的布局工具,它能够帮助我们快速构建响应式、灵活且美观的页面布局。然而,对于许多初学者和从业者来说,栅格系统的概念、原理以及实际应用却常常令…...
mysql Innodb引擎常见问题
问题 1:InnoDB 引擎的主要特点有哪些? 答:支持事务、行级锁、外键约束,具有较好的数据完整性和并发性。 问题 2:InnoDB 如何实现事务的 ACID 特性? 答:通过原子性(事务要么全部成功要…...
创建 MFC DLL-使用关键字_declspec(dllexport)
本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 从MFC DLL中导出函数的另一种方法是在定义函数时使用关键字_declspec(dllexport)。这种情况下,不需要DEF文件。 导出函数的形式为: declspec(dll…...
机器学习笔记 - 用于3D数据分类、分割的Point Net的网络实现
上一篇,我们大致了解了Point Net的原理,这里我们要进行一下实现。 机器学习笔记 - 用于3D数据分类、分割的Point Net简述-CSDN博客文章浏览阅读3次。在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transforme…...
C#知识|基于实体类对象,返回实体集合封装介绍。
哈喽,你好啊,我是雷工! 前面通过实体类封装传递了零散的参数,打包后给数据访问方法。 但当查询结果是数据集,要把查询到的数据返回给UI时,我们也可以把返回的多条零散数据封装到实体类中。 此次练习可以使用实体容器:泛型集合List<T>,当把每条数据封装成实体对…...
关于Redis中哨兵(Sentinel)
Redis Sentinel 相关名词解释 名词 逻辑结构 物理结构 主节点 Redis 主服务 一个独立的 redis-server 进程 从节点 Redis 从服务 一个独立的 redis-server 进程 Redis 数据节点 主从节点 主节点和从节点的进程 哨兵节点 监控 Redis 数据节点的节点 一个独立的 re…...
论文阅读:H-ViT,一种用于医学图像配准的层级化ViT
来自CVPR的一篇文章,用CNNTransformer混合模型做图像配准。可变形图像配准是一种在相同视场内比较或整合单模态或多模态视觉数据的技术,它旨在找到两幅图像之间的非线性映射关系。 1,模型结构 首先,使用类似特征金字塔网络&#…...
【MySQL】(基础篇七) —— 通配符和正则表达式
通配符和正则表达式 本章介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤;如何使用正则表达式来更好地控制数据过滤。 目录 通配符和正则表达式LIKE操作符百分号(%)通配符下划线(_)通配符 通配符使用技巧正…...
HTML静态网页成品作业(HTML+CSS)—— 名人霍金介绍网页(6个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有6个页面。 二、作品演示 三、代…...
MySQL: 索引与事务
文章目录 1. 索引 (Index)1.1 概念1.2 作用1.3 使用场景1.4 索引的使用1.5 索引的使用案例 (不要轻易尝试)1.6 索引背后的数据结构1.7 重点总结 2.事务2.1 为什么要使用事务2.2 事务的概念2.3 事务的使用2.4 对事务的理解2.5 事务的基本特性 1. 索引 (Index) 1.1 概念 索引是…...
2024年最新Microsoft Edge关闭自动更新的方法分享
这里写自定义目录标题 打开【服务】 打开【服务】 windows中搜索服务,如下图: 打开服务界面,找到“Microsoft Edge Update Service (edgeupdate)” 及 “Microsoft Edge Update Service (edgeupdatem)” 两个服务,设置为禁用...
Unity3D TextMeshPro组件使用及优化详解
在Unity3D游戏开发中,文本渲染是一个不可或缺的部分。而TextMeshPro作为Unity的一个插件,提供了更高质量、更灵活的文本渲染功能,为开发者带来了极大的便利。本文将详细介绍TextMeshPro组件的使用技巧以及优化方法,并通过代码实例…...
react 0至1 【jsx】
1.函数调用 // 项目的根组件 // App -> index.js -> public/index.html(root)const count 100function getName () {return test }function App () {return (<div className"App">this is App{/* 使用引号传递字符串 */}{this is message}{/* 识别js变…...
算法训练营day58
题目1:392. 判断子序列 - 力扣(LeetCode) 暴力解法 class Solution { public:bool isSubsequence(string s, string t) {if(s.size() > t.size()) return false;if(s.size() < t.size()) {swap(s, t);}bool reslut false;int flag …...
JAVA面试中,面试官最爱问的问题。
解释Java中的抽象类和接口的区别。 在Java中,抽象类和接口都是用来定义类的抽象行为和特性的,但它们有一些关键区别: ### 抽象类 1. **定义**:抽象类是使用abstract关键字修饰的类,不能被实例化,只能被继…...
【机器学习300问】115、对比K近邻(KNN)分类算法与逻辑回归分类算法的差异与特性?
在学习了K近邻(KNN)和逻辑回归(Logistic Regression)这两种分类算法后,对它们进行总结和对比很有必要。尽管两者都能有效地执行分类任务,但它们在原理、应用场景和性能特点上存在着显著的差异。本文就是想详…...
开源机械爪智能增强:计算机视觉与运动规划赋予抓取超能力
1. 项目概述:当“机械爪”遇上“超能力”如果你玩过抓娃娃机,或者关注过工业自动化,对机械爪(Claw)这个概念一定不陌生。它的核心任务简单直接:识别、定位、抓取。但现实往往骨感——面对形状不规则、材质光…...
保边滤波深度学习红外可见光融合算法【附程序】
✨ 长期致力于红外与可见光图像融合、快速引导滤波器、交替引导滤波器、深度学习、卷积神经网络研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)双支流…...
服务器卡死别慌!手把手教你读懂NMI watchdog的soft lockup报错信息(附CentOS 7排查流程)
服务器卡死应急指南:NMI watchdog与soft lockup实战排查手册 凌晨三点,机房告警铃声大作,监控大屏上某台核心服务器的CPU使用率突然飙升至100%并持续不降。登录系统后,dmesg中赫然出现NMI watchdog: BUG: soft lockup - CPU#2 stu…...
告别单调仪表盘:用LVGL Gauge控件打造一个智能家居温湿度监控界面(ESP32实战)
智能家居温湿度监控实战:用LVGL打造动态仪表盘 在智能家居系统中,实时监控环境参数是基础但关键的功能。传统数字显示虽然精确,但缺乏直观性;而精心设计的仪表盘不仅能提升用户体验,还能通过视觉反馈快速传达环境状态。…...
告别时序烦恼:用Xilinx MIG IP核搞定FPGA DDR3内存接口(附MT41J256M16配置要点)
告别时序烦恼:用Xilinx MIG IP核搞定FPGA DDR3内存接口(附MT41J256M16配置要点) 在FPGA开发中,DDR3内存接口设计往往是让工程师头疼的难题之一。时序控制、信号完整性、配置参数选择,每一个环节都可能成为项目推进的拦…...
音频变压器关键参数深度解析:Z值与最大电流的工程实践
音频变压器关键参数深度解析:Z值与最大电流的工程实践引言在专业音频系统、高保真音响以及工业信号隔离场景中,音频变压器始终扮演着不可替代的角色。它的核心使命是在保持信号完整性的同时,完成阻抗匹配、地环路隔离和信号平衡转换三大任务。…...
教培机构管理越忙越乱?用对工具,比多雇两个人更高效
不少培训机构校长都有同样的感受:明明团队很拼,每天从早忙到晚,可机构依旧问题不断。招生线索散落在微信、表格、登记本里,跟进不及时就白白流失;排课全靠人工核对,老师冲突、教室撞期、调课通知不到位是常…...
Windows内核级虚拟串口驱动com0com:构建无限虚拟COM端口对的终极解决方案
Windows内核级虚拟串口驱动com0com:构建无限虚拟COM端口对的终极解决方案 【免费下载链接】com0com Null-modem emulator - The virtual serial port driver for Windows. Brought to you by: vfrolov [Vyacheslav Frolov](http://sourceforge.net/u/vfrolov/profil…...
英特尔转型芯片代工:从IDM巨头到服务商的六大挑战与机遇
1. 英特尔代工之路:从IDM巨头到服务提供商的六大挑战在半导体行业,英特尔这个名字几乎就是高性能微处理器的代名词。这家公司凭借其垂直整合制造模式,在过去几十年里构筑了难以撼动的技术护城河。然而,当行业的目光从单纯的制程竞…...
对比按量计费与Token Plan套餐,哪种方式更适合你的项目
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按量计费与Token Plan套餐,哪种方式更适合你的项目 在接入大模型服务时,成本控制是每个开发者和团队都…...
