当前位置: 首页 > news >正文

Python框架【自定义过滤器、自定义数据替换过滤器 、自定义时间过滤器、选择结构、选择练习、循环结构、循环练习、导入宏方式 】(三)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白
📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

🔥🔥🔥 python入门到实战专栏:从入门到实战 

🔥🔥🔥 Python爬虫开发专栏:从入门到实战

🔥🔥🔥 Python办公自动化专栏:从入门到实战

🔥🔥🔥 Python数据分析专栏:从入门到实战

🔥🔥🔥 Python前后端开发专栏:从入门到实战

文章目录

自定义过滤器

自定义数据替换过滤器 

自定义时间过滤器

流程控制-选择结构

 流程控制-选择练习

流程控制-循环结构

 流程控制-循环练习

宏的使用

 定义宏

使用宏

导入宏方式 

导入模板include 

 set与with标签

静态文件


自定义过滤器

 只有当系统提供的过滤器不符合需求后,才须自定义过滤器 过滤器本质上就是一个函数。

如果在模版中调用这个过滤器,那么就会将这个变量的值作为第一 个参数传给过滤器这个函数, 然后函数的返回值会作为这个过滤器的返回值。

需要使用到一个装饰器: @app.template_filter('过滤器名称')

自定义数据替换过滤器 

例如:将新闻中出现的 所有“ 我是九你是三,除了你还是你” 换成 "你不用多好,我喜欢就好"

#将模版设置为自动加载模式
app.config['TEMPLATES_AUTO_RELOAD']=True
@app.template_filter('cut')
def cut(value):value=value.replace("我是九你是三,除了你还是你",'你不用多好,我喜欢就好')return value
<p>使用自定义过滤器:{{新闻内容值|cut}}</p>

自定义时间过滤器

例如:操作发布新闻 与现在的时间间隔

from datetime import datetime
#需求:操作发布新闻 与现在的时间间隔
@app.template_filter('handle_time')
def handle_time(time):"""time距离现在的时间间隔1. 如果时间间隔小于1分钟以内,那么就显示“刚刚”2. 如果是大于1分钟小于1小时,那么就显示“xx分钟前”3. 如果是大于1小时小于24小时,那么就显示“xx小时前”4. 如果是大于24小时小于30天以内,那么就显示“xx天前”5. 否则就是显示具体的时间 2030/10/20 16:15"""if isinstance(time, datetime):now = datetime.now()timestamp = (now - time).total_seconds()if timestamp < 60:return "刚刚"elif timestamp >= 60 and timestamp < 60 * 60:minutes = timestamp / 60return "%s分钟前" % int(minutes)elif timestamp >= 60 * 60 and timestamp < 60 * 60 * 24:hours = timestamp / (60 * 60)return '%s小时前' % int(hours)elif timestamp >= 60 * 60 * 24 and timestamp < 60 * 60 * 24 * 30:days = timestamp / (60 * 60 * 24)return "%s天前" % int(days)else:return time.strftime('%Y/%m/%d%H:%M')else:return time
<p>发布时间:{{新闻创建时间|handle_time}}</p>

流程控制-选择结构

 所有的控制语句都是放在 {% ... %} 中,并且有一个语句 {% endxxx %} 来进行结束!

if:if语句和python中的类似,可以使用 >,=,==,!= 来进行判 断,也可以通过 and,or,not,() 来进行逻辑合并操作

<h1>选择结构</h1>
{% if uname == 'aps' %}
<p>艾派森</p>
{% endif %}
{% if uname == 'aps' %}
<p>艾派森</p>
{% else %}
<p>小王程序员</p>
{% endif %}
{% if uname == 'aps' %}
<p>艾派森</p>{% elif uname == 'xiaowang'%}
<p>小王程序员</p>
{% else %}
<p>学Python 找小王程序员!!</p>
{% endif %}
{% if age >= 18 %}<p>{{ age }}岁,成年人,可以通宵打游戏</p>
{% else %}<p>{{ age }}岁,未成年人,可以通宵学习</p>
{% endif %}
@app.route('/')
def index():uname = 'xiaotong3'return
render_template('index2.html',uname = uname)

注意:

if 条件判断语句必须放在 {% if statement %} 中间,并且还必须有结束的标签 {% endif %} 。

 流程控制-选择练习

 python

from flask import
Flask,render_template,requestapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')@app.route('/login')
def login():user = request.args.get('user')return render_template('index.html',user = user)if __name__ =='__main__':app.run(debug=True)

template

<body><span>中国大陆</span>{% if not user %}<a href="{{url_for('login',user='吕布')}}">亲,请登录</span></a><span>免费注册</span>{% else %}<span>{{ user }}</span>{% endif %}<span>手机淘宝</span>
</body>

流程控制-循环结构

 for...in... for 循环可以遍历任何一个序列包括列表、字典、元组。并且可以进行反向遍历,以下将用几个例子进行解释:

列表

<ul>{% for user in users%}<li>{{ user}}</li>{% endfor %}
</ul>

遍历字典

<tr>{% for key in person.keys() %}<td>{{ key}}</td>{% endfor %}
</tr>
<tr>{% for val in person.values() %}<td>{{ val}}</td>{% endfor %}
</tr>
<tr>{% for item in person.items() %}<td>{{ item}}</td>{% endfor %}
</tr>
<tr>{% for key,value in person.items() %}<td>{{ value}}</td>{% endfor %}
</tr>

如果序列中没有值的时候,进入else 反向遍历用过滤器 reverse:

<ul>{% for user in users|reverse %}<li>{{ user}}</li>{% else %}<li>没有任何用户</li>{% endfor %}
</ul>

并且Jinja中的for循环还包含以下变量,可以用来获取当前的遍历状态:

变量描述
oop.index当前迭代的索引(从1开始)
loop.index0当前迭代的索引(从0开始)
loop.first是否是第一次迭代,返回True或False
loop.last是否是最后一次迭代,返回True或False
loop.length7序列的长度

总结

jinja2 中的 for 循环,跟 python 中的 for 循环基本上是一模一样的也是 for...in... 的形式。并且也可以遍历所有的序列以及迭代器唯一不同的是, jinja2 中的 for 循环没有 break 和 continue 语句

 流程控制-循环练习

{% for x in range(1,10) %}<tr>{% for y in range(1,x + 1) %}<td>{{y}}*{{x}}={{ x*y }}</td>{% endfor %}</tr>
{% endfor %}

宏的使用

 模板中的宏跟python中的函数类似,可以传递参数,但是不能有返回值

可以将一些经常用到的代码片段放到宏中,然后6把一些不固定的值抽取出来当成一个变量

 定义宏

{% macro input(name,value="",type="text") %}<input type="{{type}}" name="{{name}}" value="{{value}}">
{% endmacro %}

使用宏

<table><tr><td>用户名:</td><td>{{ input('username')}}</td></tr><tr><td>密码:</td><td>{{ input('pwd',type='password') }}</td></tr><tr><td></td><td>{{ input(value='提交',type='submit') }}</td></tr>
</table>

访问结果

提示

实际开发中,不会把宏在一个页面内定义并直接使用 一般把宏定义放到一个专门的文件夹中,方便进行统一管理之后,哪一个页面需要使用某个宏,需要导入宏才能使用

导入宏方式 

1. from '宏文件的路径' import 宏的名字 [as xxx]。

{% from "users/users.html" import input as inp %}

2. import "宏文件的路径" as xxx [with context]

{% import "users/users.html" as usr  with context %}

注意

1. 宏文件路径,不要以相对路径去寻找,都要以 templates 作为绝对路径去找

2. 如果想要在导入宏的时候,就把当前模版的一些参数传给宏所在的模版,那么就应该在导入的时候使用 with context

{% import "users/users.html" as usr  with context %}

导入模板include 

1. 这个标签相当于是直接将指定的模版中的代码复制粘贴到当前位置。

2. include 标签,如果想要使用父模版中的变量,直接用就可以了,不需要使用 with context 。

3. include 的路径,也是跟 import 一样,直接从 templates 根目录下去找, 不要以相对路径去找。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>SXT</title>
</head>
<body><!--通过include 引入头部log信息-->{% include "common/head.html" %}<div>这是首页内容{{ major }}</div><hr><!--通过include 引入底部版权信息-->{% include "common/footer.html" %}
</body>
</html>

 set与with标签

 set的使用

在模版中,可以使用 set 语句来定义变量

<!--set语句来定义变量,之后,那么在后面的代码中,都可以使用这个变量-->
{% set uname='sxt'%}
<p>用户名:{{ uname }}</p>

一旦定义了这个变量,那么在后面的代码中,都可以使用这个变量,就类似于Python的变量定义是一样的

with语句 

with 语句定义的变量,只能在 with 语句块中使用,超过了这个代码块,就不能再使用了

<!--with语句来定义变量,只有在指定区域 才能使用这个变量-->
{% with classroom='python202'%}<p>班级:{{ classroom }}</p>
{% endwith %}

 注意

关于定义的变量, with 语句也不一定要跟一个变量, 可以定义一个空的 with 语句, 需要在指定的区域才能使用的情况,可以set与with组合使用。

{% with %}{% set  pname='李思思' %}<p>娱乐县县长:{{ pname }}</p>
{% endwith %}

静态文件

 静态文件

静态文件:css文件 js文件 图片文件等文件 加载静态文件使用的是 url_for 函数。然后第一个参数需要为 static ,第 二个参数需要为一个关键字参数 filename='路径' 。

语法

{{ url_for("static",filename='xxx') }}

例如

注意

路径查找,要以当前项目的 static 目录作为根目录

相关文章:

Python框架【自定义过滤器、自定义数据替换过滤器 、自定义时间过滤器、选择结构、选择练习、循环结构、循环练习、导入宏方式 】(三)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…...

红黑树遍历与Redis存储

引言 在计算机科学领域&#xff0c;红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉查找树&#xff0c;它能在O(log n)的时间复杂度内完成插入、删除和查找操作。由于其高效性和可预测性的性能&#xff0c;红黑树在许多领域都得到广泛应用。本文将重点介绍红…...

前端处理图片文件的方法

在项目开发过程中&#xff0c;有一个需求&#xff0c;需要前端对上传的图片进行处理&#xff0c;以字符串的形式传给后端&#xff0c;实现效果如下&#xff1a; 1.上传图片的组件 在该项目中&#xff0c;使用了element plus组件库 <el-uploadv-model:file-list"fileL…...

「Java」《深入解析Java多线程编程利器:CompletableFuture》

《深入解析Java多线程编程利器&#xff1a;CompletableFuture》 一、 引言1. 对多线程编程的需求和挑战的介绍2. 介绍CompletableFuture的作用和优势 二. CompletableFuture简介1. CompletableFuture是Java中提供的一个强大的多线程编程工具2. 与传统的Thread和Runnable相比的优…...

Docker容器与虚拟化技术:容器运行时说明与比较

目录 一、理论 1.容器运行时 2.容器运行时接口 3.容器运行时层级 4.容器运行时比较 5.强隔离容器 二、问题 1.K8S为何难以实现真正的多租户 三、总结 一、理论 1.容器运行时 &#xff08;1&#xff09;概念 Container Runtime 是运行于 k8s 集群每个节点中&#xff…...

vue导出文件流获取附件名称并下载(在response.headers里解析filename导出)

导出文件流下载&#xff0c;拦截器统一处理配置 需求以往实现的方法&#xff08;各自的业务层写方法&#xff09;现在实现的方法&#xff08;axios里拦截器统一配置处理&#xff09;把文章链接复制粘贴给后端&#xff0c;让大佬自己赏阅。 需求 之前实现的导出都是各自的业务层…...

​山东省图书馆典藏《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书

​山东省图书馆《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书...

2023-08-19力扣每日一题-水题/位运算解法

链接&#xff1a; 2235. 两整数相加 题意&#xff1a; ab 解&#xff1a; ab 补一个位运算写法&#xff0c;进位是(a&b)<<1&#xff0c;不进位的计算结果为a^b 实际代码&#xff1a; #include<iostream> using namespace std; int sum(int num1, int n…...

Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)

Hadoop学习&#xff1a;深入解析MapReduce的大数据魔力之数据压缩&#xff08;四&#xff09; 4.1 概述1&#xff09;压缩的好处和坏处2&#xff09;压缩原则 4.2 MR 支持的压缩编码4.3 压缩方式选择4.3.1 Gzip 压缩4.3.2 Bzip2 压缩4.3.3 Lzo 压缩4.3.4 Snappy 压缩4.3.5 压缩…...

LRU淘汰策略执行过程

1 介绍 Redis无论是惰性删除还是定期删除&#xff0c;都可能存在删除不尽的情况&#xff0c;无法删除完全&#xff0c;比如每次删除完过期的 key 还是超过 25%&#xff0c;且这些 key 再也不会被客户端访问。 这样的话&#xff0c;定期删除和堕性删除可能都彻底的清理掉。如果…...

Kotlin 高阶函数详解

高阶函数 在 Kotlin 中&#xff0c;函数是一等公民&#xff0c;高阶函数是 Kotlin 的一大难点&#xff0c;如果高阶函数不懂的话&#xff0c;那么要学习 Kotlin 中的协程、阅读 Kotlin 的源码是非常难的&#xff0c;因为源码中有太多高阶函数了。 高阶函数的定义 高阶函数的…...

DL——week2

要学明白的知识点&#xff1a; np.dot()的作用 两个数组的点积&#xff0c;即对应元素相乘 numpy.dot(a,b,outNone) a: ndarray 数组 b: ndarray 数组 out: ndarray, 可选&#xff0c;用来保存dot&#xff08;&#xff09;的计算结果 numpy Ndarray对象 N维数组对象ndarray&am…...

如何撰写骨灰级博士论文?这是史上最全博士论文指导!

博士论文的写作是博士研究生主要要完成的工作。由于存在着较高的难度&#xff0c;较长的写作周期&#xff0c;以及在创新&#xff0c;写作规范&#xff0c;实际及理论意义等方面有着比较高的要求&#xff0c;博士论文的完成一般说来是有相当难度的。一篇好的博士论文不仅是一本…...

08.SpringBoot请求相应

文章目录 1 请求1.1 Postman1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 日期参数1.6 JSON参数1.7 路径参数 2 响应2.1 ResponseBody注解2.2 统一响应结果…...

C#详解-Contains、StartsWith、EndsWith、Indexof、lastdexof

目录 简介: 过程: 举例1.1 举例1.2 ​ 总结: 简介: 在C#中Contains、StarsWith和EndWith、IndexOf都是字符串函数。 1.Contains函数用于判断一个字符串是否包含指定的子字符串&#xff0c;返回一个布尔值&#xff08;True或False&#xff09;。 2.StartsWith函数用于判断一…...

FATE框架中pipline基础教程

目录 1. 用pipline上传数据2. 用 Pipeline 进行 Hetero SecureBoost 的训练和预测3. 用 Pipeline 构建神经网络模型3.1 Homo-NN Quick Start: A Binary Classification Task3.2 Hetero-NN Quick Start: A Binary Classification Task 4. 自定义数据集示例&#xff1a;实现一个简…...

Atlas 元数据管理

Atlas 元数据管理 1.Atlas入门 1.1概述 元数据原理和治理功能&#xff0c;用以构建数据资产的目录。对这个资产进行分类和管理&#xff0c;形成数据字典。 提供围绕数据资产的协作功能。 表和表之间的血缘依赖 字段和字段之间的血缘依赖 1.2架构图 导入和导出&#xff1…...

编程题练习@8-23

分享8月23日两道编程题&#xff1a; 1 开幕式排列 题目描述 导演在组织进行大运会开幕式的排练&#xff0c;其中一个环节是需要参演人员围成一个环形。 演出人员站成了一圈&#xff0c;出于美观度的考虑&#xff0c;导演不希望某一个演员身边的其他人比他低太多或者高太多。 现…...

static相关知识点详解

文章目录 一. 修饰成员变量二. 修饰成员方法三. 修饰代码块四. 修饰类 一. 修饰成员变量 static 修饰的成员变量&#xff0c;称为静态成员变量&#xff0c;该变量不属于某个具体的对象&#xff0c;是所有对象所共享的。 public class Student {private String name;private sta…...

Redisson 分布式锁

Redis是基础客户端库&#xff0c;可用于执行基本操作。 Redisson是基于Redis的Java客户端&#xff0c;提供高级功能如分布式锁、分布式集合和分布式对象。 Redisson提供更友好的API&#xff0c;支持异步和响应式编程&#xff0c;提供内置线程安全和失败重试机制。 实现步骤…...

继承(C++)

继承 一、初识继承概念“登场”语法格式 继承方式九种继承方式组合小结&#xff08;对九种组合解释&#xff09; 二、继承的特性赋值转换 一一 切片 / 切割作用域 一一 隐藏 / 重定义 三、派生类的默认成员函数派生类的默认成员函数1. 构造函数2. 拷贝构造3. 赋值运算符重载4. …...

文心一言 VS 讯飞星火 VS chatgpt (80)-- 算法导论7.4 5题

五、如果用go语言&#xff0c;当输入数据已经“几乎有序”时&#xff0c;插入排序速度很快。在实际应用中&#xff0c;我们可以利用这一特点来提高快速排序的速度。当对一个长度小于 k 的子数组调用快速排序时&#xff0c;让它不做任何排序就返回。当上层的快速排序调用返回后&…...

SpringCloud 概述

文章目录 SpringCloud 概述一、微服务中的相关概念1、服务注册与发现2、负载均衡3、熔断4、链路追踪5、API网关 二、SpringCloud的介绍三、SpringCloud的架构1、SpringCloud中的核心组件&#xff08;1&#xff09;Spring Cloud Netflix组件&#xff08;2&#xff09;Spring Clo…...

Apache ShenYu 学习笔记一

1、简介 这是一个异步的&#xff0c;高性能的&#xff0c;跨语言的&#xff0c;响应式的 API 网关。 官网文档&#xff1a;Apache ShenYu 介绍 | Apache ShenYu仓库地址&#xff1a;GitHub - apache/shenyu: Apache ShenYu is a Java native API Gateway for service proxy, pr…...

uniapp 禁止遮罩层下的页面滚动

使用 touchmove.stop.prevent"toMoveHandle" 事件修饰符 若需要禁止蒙版下的页面滚动&#xff0c;可使用 touchmove.stop.prevent"moveHandle"&#xff0c;moveHandle 可以用来处理 touchmove 的事件&#xff0c;也可以是一个空函数。将这个方法直接丢到弹…...

postgresql 分组

postgresql 数据汇总 分组汇总聚合函数注意 总结 分组统计总结 高级分组总结 分组汇总 聚合函数 聚合函数&#xff08;aggregate function&#xff09;针对一组数据行进行运算&#xff0c;并且返回单个结果。PostgreSQL 支持以下常见的聚合函数&#xff1a; • AVG - 计算一…...

RT1052的EPWM

文章目录 1 EPWM介绍1.1 引脚1.2 时钟1.3 比较寄存器 2 函数 1 EPWM介绍 RT1052 具有 4 个 eFlexPWM(eFlexWM1~eFlex_PWM4)。 每个 eFlexPWM 可以产生四路互补 PWM即产生 8 个 PWM&#xff0c;也可以产生相互独立的 PWM 波。四路分别是模块0-3每个 eFlexPWM 具有各自的故障检…...

k8s 安装istio (一)

前置条件 已经完成 K8S安装过程十&#xff1a;Kubernetes CNI插件与CoreDNS服务部署 部署 istio 服务网格与 Ingress 服务用到了 helm 与 kubectl 这两个命令行工具&#xff0c;这个命令行工具依赖 ~/.kube/config 这个配置文件&#xff0c;目前只在 kubernetes master 节点中…...

vue 项目在编译时,总是出现系统崩的状态,报错信息中有v7 或者 v8 的样式-项目太大内存溢出

vue 项目在编译时&#xff0c;总是出现系统崩的状态&#xff0c;node 命令框也会报错&#xff0c;如下图&#xff1a;有v7 或者 v8 的样式。 原因分析&#xff1a; 分析&#xff1a;遇到与上面图片相似的问题&#xff0c;我们要首先要想到是否是 有关内存的问题&#xff0c;当然…...

低功耗蓝牙射频指纹识别

射频指纹 射频指纹是什么 射频指纹是一种利用无线电信号的特征来识别设备或用户的技术。射频指纹可以用来做设备身份认证、位置跟踪、安全防护等应用。射频指纹的优点是难以伪造、不依赖于额外的硬件或软件、适用于多种无线通信协议。 射频指纹识别流程 射频指纹识别的一般…...

动态网站建设试题/青岛网站建设制作

寒假工作坊Python&Stata数据分析课寒假工作坊现在开始招生了&#xff0c;有兴趣的同学和老师可以戳进来了解课程安排 1月9-10日 Python爬虫&文本数据分析(模块Ⅰ&#xff09; 1月11-16日 Stata 应用能力提升与实证前沿(模块Ⅱ) 地点浙江 杭州&#xff08;浙江工…...

此网站建设于美利坚/软文广告经典案例300

一 本次通过一个简单的C/CLI控制台程序&#xff0c;能使学习者有对C/CLI程序有个个大概的印象&#xff0c;同时引出一些基本的概念和关键字。下面是程序代码&#xff1a; #include <iostream>#include <string>//1 ISOCpublicclassNativeClass{public: NativeCl…...

成都网站建设网站/seo网站推广是什么意思

关于F5负载均衡你认识多少&#xff1f; 2018年06月09日 18:01:09 tvk872 阅读数&#xff1a;14008网络负载均衡&#xff08;load balance&#xff09;&#xff0c;就是将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行执行&#xff0c;例如web服务器…...

宠物网站素材/文案发布平台

提问嘉宾&#xff1a; 盛国军&#xff0c;上海麦考林信息科技有限公司首席架构师。曾历任8848软件架构师、光芒国际磊客中国技术总监。具有10年互联网和电子商务开发经验&#xff0c;5年软件架构师经验&#xff0c;3年两千万美金投资的大型网站技术总监管理经验。 回答嘉宾&…...

网站开发商/合肥网站维护公司

memset函数在 #include<string.h>sort函数在 #include<algorithm>因为蓝桥杯没有c11语法&#xff0c;无法使用auto函数&#xff0c;创建迭代器需要 迭代器定义::iterator 如 map<int,int>::iterater it ma.begin()abs&#xff0c;sqrt函数在 #include<…...

做绿色软件的网站知乎/橙子建站官网

[url]http://yp.oss.org.cn/blog/show_resource.php?resource_id1069[/url] 一&#xff0e;准备安装CentOS 61&#xff0e;CentOS简介CentOS 是甚么&#xff1f; CentOS 是一个基于Red Hat 企业级 Linux 提供的可自由使用的源代码企业级的 Linux 发行版本。每个版本的 CentOS …...