Django 过滤器汇总及自定义过滤器使用详解
Django过滤器
或 Hi David Thisisapen<;'|truncatewords:2}}返回 Thisis...<;
过滤器
描述
示例
upper
以大写方式输出
{{user.name|upper}}
add
给value加上一个数值
{{user.age|add:”5”}}
addslashes
单引号加上转义号
capfirst
第一个字母大写
{{‘good'|capfirst}}返回”Good”
center
输出指定长度的字符串,把变量居中
{{“abcd”|center:”50”}}
cut
删除指定字符串
{{“YouarenotaEnglishman”|cut:”not”}}
date
格式化日期
default
如果值不存在,则使用默认值代替
{{value|default:”(N/A)”}}
default_if_none
如果值为None,则使用默认值代替
dictsort
按某字段排序,变量必须是一个dictionary
{%formomentinmoments|dictsort:”id”%}
dictsortreversed
按某字段倒序排序,变量必须是dictionary
divisibleby
判断是否可以被数字整除
{{224|divisibleby:2}}返回True
escape
按HTML转义,比如将”<”转换为”<”
filesizeformat
增加数字的可读性,转换结果为13KB,89MB,3Bytes等
{{1024|filesizeformat}}返回1.0KB
first
返回列表的第1个元素,变量必须是一个列表
floatformat
转换为指定精度的小数,默认保留1位小数
{{3.1415926|floatformat:3}}返回3.142 四舍五入
get_digit
从个位数开始截取指定位置的数字
{{123456|get_digit:'1'}}
join
用指定分隔符连接列表
{{[‘abc','45']|join:'*'}}返回abc*45
length
返回列表中元素的个数或字符串长度
length_is
检查列表,字符串长度是否符合指定的值
{{‘hello'|length_is:'3'}}
linebreaks
用
标签包裹变量{{“Hi\n\nDavid”|linebreaks}}返回
linebreaksbr
用
标签代替换行符
linenumbers
为变量中的每一行加上行号
ljust
输出指定长度的字符串,变量左对齐
{{‘ab'|ljust:5}}返回‘ab '
lower
字符串变小写
make_list
将字符串转换为列表
pluralize
根据数字确定是否输出英文复数符号
random
返回列表的随机一项
removetags
删除字符串中指定的HTML标记
{{value|removetags:“h1h2”}}
rjust
输出指定长度的字符串,变量右对齐
slice
切片操作,返回列表
{{[3,9,1]|slice:':2'}}返回[3,9]
{{'asdikfjhihgie'|slice:':5'}}返回‘asdik'
slugify
在字符串中留下减号和下划线,其它符号删除,空格用减号替换
{{'5-2=3and52=3'|slugify}}返回5-23and5-23
stringformat
字符串格式化,语法同python
time
返回日期的时间部分
timesince
以“到现在为止过了多长时间”显示时间变量
结果可能为45days,3hours
timeuntil
以“从现在开始到时间变量”还有多长时间显示时间变量
title
每个单词首字母大写
truncatewords
将字符串转换为省略表达方式
{{'Thisisapen'|truncatewords:2}}返回Thisis...
truncatewords_html
同上,但保留其中的HTML标签
{{'
urlencode
将字符串中的特殊字符转换为url兼容表达方式
{{‘http://www.aaa.com/foo?a=b&b=c'|urlencode}}
urlize
将变量字符串中的url由纯文本变为链接
wordcount
返回变量字符串中的单词数
yesno
将布尔变量转换为字符串yes,no或maybe
{{True|yesno}}
{{False|yesno}}
{{None|yesno}}返回yesnomaybe
自定义过滤器:
第一步:在app目录下创建包templatetags
在templatetags下创建py文件,文件名随意,比如
自定义simple_tag,不能在模板中使用if判断
fromdjangoimporttemplate fromdjango.utils.htmlimportformat_html importdatetime register=template.Library() @register.simple_tag defpage_cut(current_page,loop_page): #分页:固定显示前后5页 differ=abs(current_page-loop_page) ifdiffer<5: li='''%s (current)'''%(loop_page,loop_page) returnformat_html(li) else: #这里一定要返回一个空字符串,否则在前端会显示一系列的None return''
自定义过滤器函数filter
因为sample_tag不能使用if判断,所以才有了它
最多只能有两个参数,一个是变量值,一个是选项值
fromdjangoimporttemplate fromdjango.utils.htmlimportformat_html importdatetime register=template.Library() @register.filter deftime_color(exp_date): #给一个月内到期的html标签加上class属性 startdate=datetime.datetime.now().date() enddate=startdate+datetime.timedelta(30) if(enddate-exp_date).days>0and(enddate-exp_date).days<=30: td='''%s'''%('exp_date',exp_date) returnformat_html(td) elif(enddate-exp_date).days>30: td=''' %s'''%(exp_date) returnformat_html(td) else: td=''' %s '''%(exp_date) returnformat_html(td)
第二步,html引用
在文件开头导入
{%loadmy_page%}
使用
{%forprojectinprojects_list%}{%endfor%} {{project.com_name}} {{project.name}} {{project.domain}} {{project.get_status_display}} {{project.exp_date|time_color}}{{project.ftp}}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。