Jinja2----------过滤器的使用、控制语句

news2024/9/28 23:22:41

目录

1.过滤器的使用

1.过滤器和测试器

2.过滤器

templates/filter.html

app.py

效果

3.自定义过滤器

app.py

templates/filter.html

效果 

 2.控制语句

1.if

app.py 

templates/control.html

2.for 

app.py

templates/control.htm 


1.过滤器的使用

1.过滤器和测试器

       在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现。在模板中,我们则是通过过滤器来实现的。过滤器本质上也是函数,但是在模板中使用的方式是通过管道符号(|)来调用的。例如有个字符串类型变量name,想要获取他的长度,则可以通过 {name[length}}来获取,Jinja2会把name当做第一个参数传给length过滤器底层对应的函数。length是Jinja2内置好的过滤器,Jinja2中内置了许多好用过滤器,如果内置过滤器不满足需求,我们还可以自定义过滤器。我们先来学习下如何自定义过滤器,读者明白了过滤器的原理后,再去学习Jinja2内置过滤器就更能得心应手了。

2.过滤器

templates/filter.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器使用demo</title>
</head>
<body>
{{ user.username}}-{{ user.username|length }}
</body>
</html>

app.py

# render_template 渲染模板
from flask import Flask, render_template

app = Flask(__name__)

class User:
    def __init__(self, username, email):
        self.username = username
        self.email = email

@app.route("/filter")
def filter_demo():
    user = User(username="小程xxx", email="xxx@qq.com")
    return render_template("filter.html",user=user)

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

效果

3.自定义过滤器

       过滤器本质上是 Python的函数,他会把被过滤的值当做第一个参数传给这个函数,函数经过一些逻辑处理后,再返回新的值。在过滤器函数写好后,可以通过@app.template_ filter装饰器或者是app.add_template_filter函数来把函数注册成Jinja2能用的过滤器。这里我们以注册一个时间格式化的过滤器为例,来说明下自定义过滤器的方法。

app.py

# render_template 渲染模板
from flask import Flask, render_template
from datetime import datetime

app = Flask(__name__)

# strftime:根据区域设置格式化本地时间
# format:格式化
def datetime_format(value,format="%Y年%m月%d日 %H:%m"):
    return value.strftime(format)

app.add_template_filter(datetime_format,"dformat")

class User:
    def __init__(self, username, email):
        self.username = username
        self.email = email


# filter:过滤器
@app.route("/filter")
def filter_demo():
    user = User(username="小程xxx", email="xxx@qq.com")
    mytime=datetime.now()
    return render_template("filter.html",user=user,mytime=mytime)

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

       上面我们定义了一个datetime_formt的函数,第一个参数是需要被处理的值,第二个参数是时间的格式,并且指定了一个默认值。然后下面通过app.add_template_filter,将datetime_format函数注册成了过滤器,并且这个过滤器的名字,叫做dformat。那么以后在模板文件中,就可以这样类似这样使用了:

templates/filter.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器使用demo</title>
</head>
<body>
<div>{{ user.username}}-{{ user.username|length }}</div>
<div>{{ mytime|dformat }}</div>
</body>
</html>

效果 

 2.控制语句

1.if

app.py 

# render_template 渲染模板
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/control")
def control_statement():
    age=17
    return render_template("control.html",age=age)

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

templates/control.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% if age>18 %}
    <div>您已经满118岁,可以进入网吧!</div>
{% elif age==18 %}
    <div>您刚满18岁,需要父母陪同才能进入!</div>
{% else %}
    <div>您未满18岁,不能进入网吧!</div>
{% endif %}
</body>
</html>

注:

  • 可以注意到if语句结束后,需要加一个endif来关闭if代码块。这个跟python是有点不同的。
  • Jinja2中的代码缩进只是为了更加方便阅读。任何缩进都不是必须的。

 

2.for 

app.py

# render_template 渲染模板
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/control")
def control_statement():
    age = 17
    books = [{
        "name": "三国演义",
        "author": "罗贯中"
    },{
        "name": "水浒传",
        "author": "施耐庵"
    }
    ]
    return render_template("control.html", age=age,books=books)


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

templates/control.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{% for book in books %}
    <div>图书名称:{{ book.name }},图书作者:{{ book.author }}</div>
{% endfor %}

</body>
</html>

 

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

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

相关文章

在linux中配置环境变量

1. 环境变量的作用 环境变量是操作系统在运行的时候&#xff0c;记录的一些关键性信息&#xff0c;用于辅助系统的运行。 在linux中执行 evn 命令即可查看当前系统中记录的环境变量。 环境变量是一种KeyValue结构 2. 符号$ 在linux系统中&#xff0c;$&#xff0c;用于取“…

【C++】STL——list的模拟实现

list的模拟实现 文章目录list的模拟实现一、list三个基本类的模拟实现总览二、节点类接口实现模拟实现构造函数三、迭代器类接口实现1.正向迭代器默认成员函数构造函数六种运算符重载 */->//--/!/2.反向迭代器四、list类接口实现1.默认成员函数1.1.构造函数1.2.析构函数1.3.…

Hive3.1.3安装部署_最小化部署_元数据MySQL部署_Hiveserver2部署_metastore部署---大数据之Hive工作笔记0012

hbase 实时分析 hive 离线分析 这里是新版本的hive3.1.3的安装 关于hive的原理之前的博客已经详细说了 可以看到上面是hive运行的原理图 词法分析 语法分析

P6软件如何设置权重体系

卷首语 同时&#xff0c;由于项目包含不同专业、不同类型的活动&#xff0c;需通过建立科学的测量体系以将底层活动的进度逐层汇总从而获得项目总体进度数据。 权重体系的确定 进度检测权重体系的建立过程&#xff0c;即是确定进度检测层级中的每项元素对其上一级元素进度的…

Github每日精选(第102期): PyGWalker将panda数据帧转换为Tableau风格的用户界面,用于可视化分析

PyGWalker可以简化Jupyter笔记本的数据分析和数据可视化工作流程&#xff0c;方法是将panda数据帧转换为Tableau风格的用户界面进行可视化探索。 PyGWalker&#xff08;发音像“Pig Walker”&#xff0c;只是为了好玩&#xff09;被命名为“Graphic Walker的Python绑定”的缩写…

ChIP-seq 分析:Peak 注释与可视化(9)

1. 基因注释 到目前为止&#xff0c;我们一直在处理对应于转录因子结合的 ChIPseq 峰。顾名思义&#xff0c;转录因子可以影响其靶基因的表达。 转录因子的目标很难单独从 ChIPseq 数据中确定&#xff0c;因此我们通常会通过一组简单的规则来注释基因的峰&#xff1a; 如果峰与…

二月安全月报 | 45亿条快递数据疑泄露,Twitter史上最大规模宕机

为了让大家更全面的了解网络安全的风险&#xff0c;顶象针对每月值得关注的安全技术和事件进行盘点总结。 国内安全热点 &#x1f449;业务安全 男子注册上万账号薅羊毛获利13万 近日&#xff0c;上海市&#xff0c;由闵行区人民检察院提起公诉的刘某某诈骗一案开庭审理&…

Stream流和不可变集合

一、不可变集合 什么是不可变集合&#xff1f; 不可变集合&#xff0c;就是不可被修改的集合。 集合的数据项在创建的时候提供&#xff0c;并且在整个生命周期中都不可改变。否则报错。 为什么要创建不可变集合&#xff1f; 如果某个数据不能被修改&#xff0c;把它防御性地拷…

Apache Airflow Hive Provider 任意Hive命令执行漏洞

漏洞描述 Apache Airflow 是一个以编程方式管理 workflow 的平台&#xff0c;Airflow Hive Provider 是一个使用 SQL 进行读取、写入和管理分布式存储中的大型数据集的工具包&#xff0c;_prepare_cli_cmd 方法用于创建 Hive 连接命令列表。 由于 Airflow Hive Provider 5.1.…

论文阅读:MPViT : Multi-Path Vision Transformer for Dense Prediction

中文标题&#xff1a;基于多路视觉Transformer的密集预测 提出问题 创新点 提出了一种具有多路径结构的多尺度嵌入方法&#xff0c;以同时表示密集预测任务的精细和粗糙特征。全局到局部的特征交互&#xff08;GLI&#xff09;&#xff0c;以同时利用卷积的局部连通性和转换器…

汽车刹车传感

一、方案概述&#xff1a;刹车传感器&#xff0c;作用于刹车系统的传感器类型&#xff0c;帮助驾驶人员判断刹车片的磨损情况&#xff0c;便于及时检修维护&#xff0c;保证制度系正常稳定工作。刹车片报警基本有两种&#xff0c;第一种是比较简单的机械报警&#xff0c;就是当…

Android Framework-Android进程/线程和程序内存优化

Android进程和线程 进程&#xff08;Process&#xff09;是程序的一个运行实例&#xff0c;以区别于“程序”这一静态的概念&#xff1b;而线程&#xff08;Thread&#xff09;则是CPU调度的基本单位。 Android中的程序和进程具体是什么概念呢&#xff1f; 一个应用程序的主入…

十一、Vben框架部分组件样式的重新封装

在使用vben框架的时候发现部分的样式不符合实际的需求&#xff0c;ant-design-vue的样式也不支持我们的需求&#xff0c;那怎么办呢&#xff0c;只能自己来修改&#xff0c;下面我就改大家说说我遇到的一些修改过的样式和组件。 一、inputNumber带前后标志 先看下目前支持的样…

命令查看Linux服务器内存、CPU、显卡、硬盘使用情况

命令查看Linux服务器内存、CPU、显卡、硬盘使用情况 查看内存使用情况 使用命令&#xff1a;free -m 大致结果类似下图&#xff1a; 内存占用情况 参数解释&#xff1a; Mem行&#xff08;单位均为M&#xff09;&#xff1a; total&#xff1a;内存总数used&#xff1a;已…

4.4 like通配符关键字过滤查询数据

文章目录1.概述2.LIKE关键字3.百分号&#xff08;%&#xff09;通配符3.1 单个百分号&#xff08;%&#xff09;通配符3.2 多个百分号&#xff08;%&#xff09;通配符3.3 在值的中间使用百分号&#xff08;%&#xff09;通配符3.4 注意事项4.下划线&#xff08;_&#xff09;通…

centos7 配置samba

samba概述&#xff1a; Windows与Linux之间通信的桥梁&#xff0c;Samba是一个非常强大的文件服务器。Samba端口&#xff1a;udp 137 udp138&#xff0c;tcp139 tcp445。Samba工作模式&#xff1a;C/S模式&#xff08;客户端-服务器&#xff09; samba应用环境 1、文件共享&…

python库--urllib

目录 一.urllib导入 二.urllib爬取网页 三.Headers属性 1.使用build_opener()修改报头 2.使用add_header()添加报头 四.超时设置 五.get和post请求 1.get请求 2.post请求 urllib库和request库作用差不多&#xff0c;但比较起来request库更加容易上手&#xff0c;但该了…

SpringCloud学习笔记 - 分布式系统全局事务管理 - Seata1.5.2+Nacos+OpenFeign

1. Seata 是什么? 由于业务和技术的发展&#xff0c;单体应用被拆分成微服务应用&#xff0c;原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源&#xff0c;业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证&#xff0c; 但是全…

【跟着ChatGPT学深度学习】ChatGPT带我学情感分析

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

5G+车联网按下加速键,这家企业已经走在行业前列

进入2023年&#xff0c;5G车联网进入了快速增长阶段&#xff0c;并且正在逐步替代4G的存量市场。 为了更好地满足5G车联网市场的需求&#xff0c;移远通信正式推出了符合3GPP Release 16标准的车规级5G NR模组AG59x系列。据了解&#xff0c;全新的产品在5G传输速度、低时延、高…