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,request

app=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 %}


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows本地使用SSH连接VM虚拟机

WIN10 VM17.5 Ubuntu:20.04 1.网路设置 1)选择编辑->更改设置 配置完成 2.修改了服务器文件&#xff0c;修改sshd配置&#xff0c;在此文件下/etc/ssh/sshd_config&#xff0c;以下为比较重要的配置 PasswordAuthentication yes PermitRootLogin yes PubkeyAuthenticat…

华为昇腾异构计算架构CANN及AI芯片简介

异构计算架构CANN 异构计算架构CANN&#xff08;Compute Architecture for Neural Networks&#xff09;是华为针对AI场景推出的异构计算架构&#xff0c;向上支持多种AI框架&#xff0c;包括MindSpore、PyTorch、TensorFlow等&#xff0c;向下服务AI处理器与编程&#xff0c;…

ISCC2024 winterbegins

首先&#xff0c;用IDA打开程序&#xff0c;看到一大堆while(1)又套着while(1)的结构&#xff0c;肯定是控制流平坦化了&#xff0c;我们可以使用IDA插件d810去掉。 现在程序就好看多了。如果IDA没有显示这堆中文字符串&#xff0c;可以考虑使用IDA8.3&#xff0c;就可以显示…

MyBatis 动态 SQL 的详细内容讲解

1. MyBatis 动态 SQL 的详细内容讲解 文章目录 1. MyBatis 动态 SQL 的详细内容讲解2. 准备工作3. if 标签4. where 标签5. trim 标签6. set 标签7. choose when otherwise 标签8. foreach 标签8.1 批量删除8.2 批量添加 9. SQL 标签与 include 标签10. 总结&#xff1a;11. 最…

【介绍下ERP,什么是ERP?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

问题:棕色试剂瓶用于盛装见光易分解的试剂或溶剂。 #其他#学习方法#微信

问题&#xff1a;棕色试剂瓶用于盛装见光易分解的试剂或溶剂。 A、正确 B、错误 参考答案如图所示

机器学习第四十三周周报 aGNN

文章目录 week43 aGNN摘要Abstract1. 题目2. Abstract3. 网络架构3.1 aGNN3.1.1 输入与输出模块3.1.2 嵌入层3.1.3编码器解码器模块&#xff1a;带有多头注意力层的GCN 3.2 可释性模型&#xff1a;SHAP 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 实验区域以及场…

CentOS手工升级curl记

笔者一台服务器装有 CentOS 7.9 系统&#xff0c;运行 curl -V 查询 curl 的版本是 7.29&#xff0c;这个老版本的 curl 不支持 HTTP/2 协议。为了使 curl 能连接HTTP/2&#xff0c;curl 必须升级到至少7.46.0版本以上。查询 curl的官网得知当前最新版本是 8.8.0&#xff0c;然…

wireshark抓包ssl数据出现ignored unknown record的原因

文章目录 前言一、出现原因二、wireshark抓包分析Ignored Unknown RecordTCP segment of a reassembled PDU 总结 前言 使用下面这个例子来观察记录层数据大于TCP MSS时用wireshark抓包出现ignored unknown record的情况并分析原因。 c语言利用openssl实现简单客户端和服务端&…

每日复盘-2024060123

今日关注&#xff1a; 这几天市场打板情绪环境转好&#xff0c;轻仓试错 20240613 六日涨幅最大: ------1--------301036--------- 双乐股份 五日涨幅最大: ------1--------301036--------- 双乐股份 四日涨幅最大: ------1--------301036--------- 双乐股份 三日涨幅最大: --…

CANable USB转CAN适配器固件的安装(ubuntu20.04)

CANable USB转CAN适配器固件和驱动的安装(以candlelight和pcan为例)ubuntu20.04 candlelight candlelight是什么 Candlelight是CANable设备的固件之一&#xff0c;用于将CANable设备转换为本机CAN设备&#xff0c;无需使用slcand。它允许CANable设备直接在Linux系统上以本机C…

【智能算法应用】基于A星算法求解六边形栅格地图路径规划

目录 1.算法原理2.结果展示3.参考文献4.代码获取 1.算法原理 精准导航&#xff1a;用A*算法优化栅格地图的路径规划【附Matlab代码】 六边形栅格地图 分析一下地图&#xff1a; 六边形栅格地图上移动可以看做6领域运动&#xff0c;偶数列与奇数列移动方式有所差异&#xff0…

Jetson Linux 上安装ZMQ

1. 安装ZMQ 框架 apt-get install libzmq3-dev 2. 或者自己build ZMQ https://github.com/zeromq/libzmq.git 参考官网教程 3. 安装CPPZMQ CPPZMQ 是ZMQ 的友好的C封装&#xff0c;只需要一个zmq.hpp 头文件即可 git clone https://github.com/zeromq/cppzmq.git cd cppz…

文件没有权限问题:cannot create /opt/apollo/neo/data/log/monitor.log: Permission denied

问题描述 执行 aem bootstrap start --plus 命令启动 Dreamview 提示错误&#xff1a; /bin/sh: 1: cannot create /opt/apollo/neo/data/log/monitor.log: Permission denied [ERROR] Failed to start Dreamview. Please check /opt/apollo/neo/data/log/dreamview.log or /op…

.net 调用海康SDK以及常见的坑解释

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 在工控领域,很多时候需要…

内网穿透的新标杆:神卓互联发布 V9.0 极速版本

在当今数字化时代&#xff0c;企业对于高效、安全的内网穿透解决方案的需求愈发迫切。神卓互联 V9.0 极速版本的惊艳发布&#xff0c;为企业提供了更为强大、稳定的内网穿透服务&#xff0c;有力地推动了企业实现更便捷的远程办公和数据共享。接下来&#xff0c;让我们详细探究…

Kubeadm 1.24.x安装教程

第一章 基本环境配置 1.1 配置hosts 所有节点 修改/etc/hosts如下&#xff1a; 192.168.0.93 W31-ywzt-SIT-1 192.168.0.94 W31-ywzt-SIT-2 1.2 CentOS 7安装yum源如下 所有节点 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo…

Beego 使用教程 9:ORM 操作数据库(上)

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发&#xff0c;包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado&#xff0c; Sinatra 和 Flask beego 官网&#xff1a;http://beego.gocn.vip/ 上面的 be…

学习笔记丨嵌入式BI分析的12个关键功能

编者注&#xff1a;以下内容节选编译自嵌入式分析厂商Qrvey发表的《What is Embedded Analytics?》&#xff08;什么是嵌入式分析&#xff09;一文&#xff0c;作者为Qrvey产品市场主管Brian Dreyer。 什么是嵌入式分析&#xff1f; 嵌入式分析是指能够将数据分析的特性和功…

嵌套查询(二)-谓词EXISTS实现嵌套查询

一、EXISTS谓词 1、作用&#xff1a;用于判断一个子查询的结果是否为空 2、使用语法&#xff1a; 【NOT】EXISTS&#xff08;子查询&#xff09; 语义&#xff1a;如果子查询的查询结果不为空&#xff0c;则EXISTS为真&#xff0c;否则为假 二、举例 1、举例1&#xff1a…