前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

过滤器

除了模板标签可以帮助我们对数据或者进行逻辑处理;django中还提供了一款工具叫做过滤器,过滤器也可以实现一些模板变量的运算,判断或是其他逻辑处理

add
{{ var1|add:var2 }}

add过滤器可以实现var1var2的相加,并且在遇到其他相同数据类型的,比如列表时,加号还可以重载为拼接功能

过滤器首先会将数据转换成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中空格是被忽略的,所以直观的我们并看不到这个过滤器的对齐效果;需要使用&nbsp才可以在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框架之模版过滤器详解及人性化过滤器相关推荐

  1. Django框架的模板层详解

    目录 一.模板简介 二.模板语法之变量 三.模板之过滤器 四.模板之标签 for标签 for ... empty if 标签 with 五.自定义标签和过滤器 六.模板导入和继承 模板导入: 模板继承 ...

  2. Django框架学习 —9模板详解 -- DTL

    作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器 模板致力于表达外观,而不 ...

  3. django框架中的QuerySet详解及相关操作

    QuerySet概念 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet. <QuerySet [<Goods: Goods object (8)>, <G ...

  4. HBase的布隆过滤器详解

    HBase的布隆过滤器详解 1.布隆过滤器的简单介绍 2.布隆过滤器的原理分析 2.1 哈希表存在的问题 2.2 布隆过滤器的原理 2.2.1 原理详解 2.2.2 布隆过滤器失误率的调节 2.2.3 ...

  5. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  6. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...

    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...

  7. pythondjango教程_Python 中Django安装和使用教程详解

    一.安装 一般使用cmd 安装就可以 手动安装通过下载方式 二.配置使用 1.通过cmd新建一个项目,我是在桌面新建 上面命令会在桌面新建pythonDjango文件夹,在里面会生成如下图两个文件 m ...

  8. 自动化测试框架[Cypress元素操作详解]

    前提 已经熟练掌握了Cypress的基本知识,请参考自动化测试框架[Cypress概述]和自动化测试框架[各自动化测试框架比较] 已经熟练掌握Cypress环境配置,请参考自动化测试框架[Cypres ...

  9. androidentity什么用_Android ORM 框架:GreenDao 使用详解(进阶篇)

    前言 在 Android ORM 框架:GreenDao 使用详解(基础篇) 中,我们了解了 GreenDao 的基本使用,本文我们将深入讲解 GreenDao 的使用 . 一.复杂表结构 a, 使用 ...

  10. android edittext 过滤英文名称,Android 限制edittext 整数和小数位数 过滤器(详解)

    写了一个过滤器,根据需要限制edittext输入的整数和小数位,如下代码: package allone.verbank.apad.client.component; import android.t ...

最新文章

  1. 怎样用Jenkins触发还有一个Jenkins---Global build solution
  2. 小米澄清传闻:不存在跨境转移利润及逃避缴纳税款行为
  3. 知识库的构建 6-1 语义网 Semantic Web
  4. hdfs 多租户_Hadoop多租户架构配置
  5. Webx MVC分析
  6. Sublime Text 3运行JavaScript控制台
  7. 濛濛有感——懂与不懂(一)
  8. Jquery checkbox选中问题
  9. JQuery checkbox check/uncheck
  10. 如何识别图片文字?这几个识别图片文字软件简单又高效
  11. 问题解决:Ubuntu18.04版本始终无法动态获取IP地址
  12. mysql数据库服务器怎么打开_怎么启动mysql数据库服务器
  13. hpe 服务器 稳定性6,将NAA ID与运行ESXi 6.7的HPE服务器上的物理驱动器托架位置相关联...
  14. 一个撒尿只用3秒的男人,成为地球首富后,却要卖豪宅上火星?
  15. 【HBZ分享】数仓里面的概念-宽表-维度表-事实表概念讲解
  16. Word怎么生成目录?4个方法快速生成目录!
  17. 【入门嵌入式系统】基础知识梳理总结
  18. SYD8811 使用外部32.768Khz晶振作为时钟源
  19. VSCode导出jar(超简单)
  20. matlab 函数pdf怎么用_smallpdf怎么用转换器合并pdf?

热门文章

  1. 相机内参标定及去畸变矫正代码示例
  2. 查哪些用户远程连接过计算机,win7怎么查看电脑被远程登陆过的记录
  3. APPCAN 长按复制、全选和分享文本
  4. 计算机课怎么保存文件,在线录制的课程如何让保存到本地?方法想不到
  5. 支付系统设计三:渠道网关设计06-业务处理
  6. 离职征兆有哪些?太真实了
  7. 【写作能力】001-写作能力是人人需要的底层能力
  8. 元宇宙通证-二、元宇宙无限游戏的无限正和机遇
  9. #cs231n#Assignment2:FullyConnectedNets.ipynb
  10. Apache Druid RCE漏洞复现(QVD-2023-9629)