Django框架之模版过滤器详解及人性化过滤器
前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
过滤器
除了模板标签可以帮助我们对数据或者进行逻辑处理;django
中还提供了一款工具叫做过滤器,过滤器也可以实现一些模板变量的运算,判断或是其他逻辑处理
add
{{ var1|add:var2 }}
add
过滤器可以实现var1
与var2
的相加,并且在遇到其他相同数据类型的,比如列表时,加号还可以重载为拼接功能
过滤器首先会将数据转换成Int类型,进行相加,如果转换失败,则会尝试使用Python
中的数据类型;列表、元祖等这样的数据类型来进行转换,并且执行对应类型的加法;如果都转换失败,那么结果为一个空字符串
<p>add :{{ value|add:10 }}</p>
<p>add :{{ list_1|add:list_2 }}</p>
capfirst
{{ var|capfirst }}
将变量第一个字母变为大写,如果第一个字符不是字母,过滤器不生效
<p>capfirst:{{ "Abc"|capfirst }}</p>
<p>capfirst:{{ "1abc"|capfirst }}</p>
center
{{ value|center:"length" }}
使value
在给定的length
范围内居中
<p>center: {{ "abc"|center:"10" }}</p>
cut
{{ value|cut:"str" }}
在value
中移除所有str
<p>cut: {{ "a*b*c"|cut:"*" }}</p>
date
{{ value|date:SHORT_DATE_FORMAT" }}
与{% now %}
标签所使用格式字符一致;value
为一个datetime
对象,输出最终格式与项目时区及语言设置有关
import datetime
datetime = datetime.datetime.now()
<p>date: {{ datetime|date:"H:i" }}</p>
<p>date: {{ datetime|date:"Y/m/d" }}</p>
default
{{ value|default:"默认值" }}
如果value
值为假,则取"默认值",反之返回value
<p>default: {{ 0|default:"这是展示的默认值" }}</p>
非空非0为真,0或空为假
default_if_none
{{ value|default_if_none:"默认值" }}
如果value
值为None
,则取"默认值",反之返回value
<p>default_if_none: {{ None|default_if_none:"value值为None" }}</p>
<p>default_if_none: {{ 0|default_if_none:"aaaa" }}</p>
dictsort
{{ value|dictsort:"attr" }}
value
为字典列表数据,列表中数据均为类字典数据:[ {1:'a'}, {2:'b'}, ]
根据给定attr
值进行排序,一般是从小到大的顺序
sort_list_dict = [{'name': '小绿', 'department': 'Development', 'age': 32},{'name': '小红', 'department': 'Leader', 'age': 21},{'name': '小飞', 'department': 'Test', 'age': 18},{'name': '小落', 'department': 'Development', 'age': 15},{'name': '大胖', 'department': 'Leader', 'age': 43}
]
<p>dictsort: </p>
{% for var in sort_list_dict|dictsort:"age" %}<p>{{ var.name }} </p>
{% endfor %}
dictsortreversed
{{ value|dictsortreversed:"attr" }}
与dictsort
功能相同,但是排序方式与dictsort
相反,从大到小
divisibleby
{{ value|divisibleby:num }}
如果给定的value
可以被num
整除,返回True
;反之,返回False
,这个过滤器常用来做整除判断
<p>divisibleby: {{ 8|divisibleby:2 }}</p>
escape
{{ value|escape }}
将value值转义输出;可以在取消转义autoescape标签下,选择性的打开某些需要转义的数据
{% autoescape off %}{{ str_|escape }}{{ str_ }}
{% endautoescape %}
safe
{{ value|safe }}
取消转义,与{% autoescape off %}
标签意义相同
<p>{{ str_|safe }}</p>
safeseq
{{ value|safeseq }}
处理一个包含标签字符串的列表数据,简单的safe
是不行的,因为safe
过滤器会把内容先整体处理为字符串;而不是依次过滤序列中的数据,而safeseq
过滤器则会依次处理序列中的每一个数据
list_ = ["<h1>第一个</h1>","<h2>第二个</h2>","<h3>第三个</h3>",
]
{{ list_|safe|join:"" }}
<br>
------------------
<br>
{{ list_|safeseq|join:"" }}
filesizeformat
{{ value|filesizeformat }}
格式化value值为人类可读的计算机存储单位。如:1 bytes、1.2 MB;如果不是一个可以处理的数值类型,返回0。最小单位为byte
<p>filesizeformat : {{ "1"|filesizeformat }}</p>
<p>filesizeformat : {{ "3758331"|filesizeformat }}</p>
first
{{ value|first }}
返回序列数据value
中的第一项
<p>first : {{ "abc"|first }}</p>
last
{{ value|last }}
返回序列数据value
中的最后一项
<p>last : {{ "abc"|last }}</p>
floatformat
{{ value|floatformat:"精度" }}
设置浮点数value
的精度,没有参数时,默认四舍五入保留小数点后一位
<p>floatformat : {{ "2.2332"|floatformat:"2" }}</p>
<p>floatformat : {{ "2.2550"|floatformat:"2" }}</p>
<p>floatformat : {{ "2.0000"|floatformat:"2" }}</p>
join
{{ value|join:"str" }}
将序列数据value
通过str
进行拼接
<p>join : {{ "abc"|join:"*" }}</p>
length_is
{{ value|length_is:"num" }}
判断序列value
的长度是否为num
,如果是,返回True
,反之返回False
<p>length_is : {{ "abc"|length_is:4 }}</p>
<p>length_is : {{ "abcd"|length_is:4 }}</p>
linebreaksbr
{{ value|linebreaksbr }}
将字符串value
中的所有换行符\n
转换为HTML
换行符<br>
str_ = "abc\nbbb"
<p>linebreaksbr : {{ str_|linebreaksbr }}</p>
linenumbers
{{ value|linenumbers }}
显示value
数据的行号,一般来说,是根据value
字符串中的\n
换行来确定每一行
str_ = "abc\nbbb"
<p>linenumbers :<br> {{ str_|linenumbers }}</p>
<p>linenumbers :<br> {{ str_|linenumbers|linebreaksbr }}</p>
ljust
{{ value|ljust:"num" }}
将字符串value
按照给定宽度num
左对齐
<p>ljust : {{"test"|ljust:"10" }}</p>
HTML中
空格是被忽略的,所以直观的我们并看不到这个过滤器的对齐效果;需要使用 
才可以在HTML
中展示真正的空格效果,这个操作会在之后的自定义过滤器中为大家介绍
rjust
{{ value|rjust:"num" }}
将字符串value
按照给定宽度num
右对齐
<p>rjust : {{ "test"|rjust:"10" }}</p>
lower
{{ value|lower }}
将字符串value
中的全部字符串小写
<p>rjust : {{ "Aa123Bb"|lower }}</p>
upper
{{ value|upper }}
将字符串value
中的全部字符串大写
<p>upper : {{ "Aa123Bb"|upper }}</p>
title
{{ value|title }}
将value
字符串中每一个单词首字母大写,其余字符小写
<p>title : {{ "heLLO a12b world"|title }}</p>
make_list
{{ value|make_list }}
将value
转换为列表
<p>make_list : {{ "a1好a2a"|make_list }}</p>
['a', '1', '好', 'a', '2', 'a']
random
{{ value|random }}
返回value
序列中的一个随机值
<p>random : {{ "12345"|random }}</p>
slice
{{ value|slice:"start:stop:step" }}
与Python
中序列切片用法类似,取出一定范围内的数据
<p>slice : {{ "abcdef"|slice:"0:5" }}</p>
<p>slice : {{ "abcdef"|slice:"0:6" }}</p>
<p>slice : {{ "abcdef"|slice:"0:6:2" }}</p>
time
{{ value|time:"time_format" }}
与date
过滤器类似,但该过滤器只处理时、分、秒;
根据时间格式化字符输出时间,输出最终格式与项目时区及语言设置有关
import datetime
datetime = datetime.datetime.now()
<p>time: {{ datetime|time:"H:i" }}</p>
<p>time: {{ datetime|time:"Y/m/d" }}</p>
timesince
{{ start_time|timesince:end_time }}
计算从start_time
一直到end_time
的时间间隔,end_time
为可选,没有该值,截至从当前时间开始
分钟为返回最小单位
start_time = datetime.datetime(2019, 3, 3, 15)
end_time = datetime.datetime(2019, 3, 5, 17)
<p>time : {{ start_time|timesince:end_time }}</p
<p>time : {{ start_time|timesince }}</p>
time : 2 days, 2 hours
time : 3 weeks, 2 days
urlencode
{{ value|urlencode }}
使用连接编码格式处理value
<p>urlencode : {{ "http://example.com"|urlencode }}</p>
urlencode : http%3A//example.com
urlize
{{ value|urlize }}
使连接字符串value
变为可点击的a标签连接
<p>urlize : {{ "http://example.com"|urlize }}</p>
<p>urlize : {{ "http://example.com" }}</p>
人性化过滤器
除去上面所介绍的过滤器,django还提供了一个专门人性化处理数据的过滤器组件;
使用时,需要将**‘django.contrib.humanize’**添加到settings.py
文件中的INSTALLED_APPS
属性中
之后在模板页面加载{% load humanize %}
就可以使用到humanize
中的人性化过滤器
apnumber
{{ value|apnumber }}
将整数转化为字符串,并按照语言设置返回对应的数字表示方式
<p>intcomma : {{ "3000"|intcomma }}</p>
<p>intcomma : {{ "23300"|intcomma }}</p>
intword
{{ value|intword }}
将一个大型数字转换成友好的文字表达形式,适合超过100万
的数字
<p>intword : {{ "310100100"|intword }}</p>
naturalday
{{ value|naturalday }}
返回value时间相对于今天。返回"今天",“明天"或者"昨天”
today = datetime.datetime.now()
<p>naturalday : {{ today|naturalday }}</p>
naturaltime
{{ value|naturaltime }}
获得value
与当前时间的时间间隔,并使用合适的文字来描述;
如果超过一天间隔,将会使用timesice
过滤器格式
start_time = datetime.datetime(2019, 3, 3, 15)
<p>naturalday : {{ start_time|naturaltime }}</p>
Django框架之模版过滤器详解及人性化过滤器相关推荐
- Django框架的模板层详解
目录 一.模板简介 二.模板语法之变量 三.模板之过滤器 四.模板之标签 for标签 for ... empty if 标签 with 五.自定义标签和过滤器 六.模板导入和继承 模板导入: 模板继承 ...
- Django框架学习 —9模板详解 -- DTL
作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器 模板致力于表达外观,而不 ...
- django框架中的QuerySet详解及相关操作
QuerySet概念 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet. <QuerySet [<Goods: Goods object (8)>, <G ...
- HBase的布隆过滤器详解
HBase的布隆过滤器详解 1.布隆过滤器的简单介绍 2.布隆过滤器的原理分析 2.1 哈希表存在的问题 2.2 布隆过滤器的原理 2.2.1 原理详解 2.2.2 布隆过滤器失误率的调节 2.2.3 ...
- java集合框架史上最详解(list set 以及map)
title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...
- 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...
超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...
- pythondjango教程_Python 中Django安装和使用教程详解
一.安装 一般使用cmd 安装就可以 手动安装通过下载方式 二.配置使用 1.通过cmd新建一个项目,我是在桌面新建 上面命令会在桌面新建pythonDjango文件夹,在里面会生成如下图两个文件 m ...
- 自动化测试框架[Cypress元素操作详解]
前提 已经熟练掌握了Cypress的基本知识,请参考自动化测试框架[Cypress概述]和自动化测试框架[各自动化测试框架比较] 已经熟练掌握Cypress环境配置,请参考自动化测试框架[Cypres ...
- androidentity什么用_Android ORM 框架:GreenDao 使用详解(进阶篇)
前言 在 Android ORM 框架:GreenDao 使用详解(基础篇) 中,我们了解了 GreenDao 的基本使用,本文我们将深入讲解 GreenDao 的使用 . 一.复杂表结构 a, 使用 ...
- android edittext 过滤英文名称,Android 限制edittext 整数和小数位数 过滤器(详解)
写了一个过滤器,根据需要限制edittext输入的整数和小数位,如下代码: package allone.verbank.apad.client.component; import android.t ...
最新文章
- 怎样用Jenkins触发还有一个Jenkins---Global build solution
- 小米澄清传闻:不存在跨境转移利润及逃避缴纳税款行为
- 知识库的构建 6-1 语义网 Semantic Web
- hdfs 多租户_Hadoop多租户架构配置
- Webx MVC分析
- Sublime Text 3运行JavaScript控制台
- 濛濛有感——懂与不懂(一)
- Jquery checkbox选中问题
- JQuery checkbox check/uncheck
- 如何识别图片文字?这几个识别图片文字软件简单又高效
- 问题解决:Ubuntu18.04版本始终无法动态获取IP地址
- mysql数据库服务器怎么打开_怎么启动mysql数据库服务器
- hpe 服务器 稳定性6,将NAA ID与运行ESXi 6.7的HPE服务器上的物理驱动器托架位置相关联...
- 一个撒尿只用3秒的男人,成为地球首富后,却要卖豪宅上火星?
- 【HBZ分享】数仓里面的概念-宽表-维度表-事实表概念讲解
- Word怎么生成目录?4个方法快速生成目录!
- 【入门嵌入式系统】基础知识梳理总结
- SYD8811 使用外部32.768Khz晶振作为时钟源
- VSCode导出jar(超简单)
- matlab 函数pdf怎么用_smallpdf怎么用转换器合并pdf?
热门文章
- 相机内参标定及去畸变矫正代码示例
- 查哪些用户远程连接过计算机,win7怎么查看电脑被远程登陆过的记录
- APPCAN 长按复制、全选和分享文本
- 计算机课怎么保存文件,在线录制的课程如何让保存到本地?方法想不到
- 支付系统设计三:渠道网关设计06-业务处理
- 离职征兆有哪些?太真实了
- 【写作能力】001-写作能力是人人需要的底层能力
- 元宇宙通证-二、元宇宙无限游戏的无限正和机遇
- #cs231n#Assignment2:FullyConnectedNets.ipynb
- Apache Druid RCE漏洞复现(QVD-2023-9629)