前言
这几年一直在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>