lala
{%endfor%}7、debug输入调试信息
{% debug %}8、firstof 输入参数中,第一个不为空或false的参数
{% firstof da 'e' 'f' %}
# 因为da是未定义的变量名,结果: 'e'9、自定义simple_tag:
3固定原则:在APP中新建包名是固定:templatetags
在views中,Library实例化名字固定:register=template.Library()
自定义函数,使用register.simple_tag装饰
使用:在HTML上方{% load 定义的python文件%}
# 在templatetags下新建python文件,custom_tag.py
# 导入template
from django import template
# 实例化
register = template.Library() # register固定,不可变为其它名
@register.simple_tag # 装饰daxie
def daxie(str1):
# 把字符串变成大写。
str1 = str(str1).upper()
return str1# 在HTML中上方载入自定义的python文件
{% load custom_tag %}
{% daxie 'WERWERFSEFkjdDFGSdfeflnnidhggindSDGSEGSFVBNHR' %}
# 参数直接写在simple_tag名字的后面,可以有多个
#结果#
WERWERFSEFKJDDFGSDFEFLNNIDHGGINDSDGSEGSFVBNHR过滤器filter:
支持链式操作,每个结果都依次传入下个|的过滤器
过滤器调用格式{{ 值|过滤器名1:参数1|过滤器名2:参数2|...........}}
说明:
值:只能传一个
管道符|:左右都不能带空格
过滤器名:函数名
:左右也不能带空格
参数:也只能传一个,多个值可以使用加引号的字典或列表,"{'name':'david','age':19}"
1、内置过滤器有30个:add\default\length\filesizeformat\slice\date\safe\truncatechars\truncatewords\cut\join\add\urlencode
# add 前值加
{{ 30|add:' 1'|add:' 3'|add:' 2'|add:' 4'|add:' 5' }} # 多个|每次传递前面的值
# 结果:sq 1 3 2 4 5
# urlencode还记得javascript地址转换吗,一样样的
{{ "http://127.0.0.1:8000/a/test/666"|urlencode }}
结果:http%3A//127.0.0.1%3A8000/a/test/666
# join 使用指定字符连接列表或字符
# views传入{'ls':[122,111,555]}
{{ ls|join:'@' }}
结果:122@111@555
{{ '1 2232'|join:'-' }}
结果:1- - - - -2-2-3-2
# cut 从字符串中删除指定字符串
{{ '1112312312311221313'|cut:'23' }}
结果:1111111221313
# truncatechars从第n个字符删除
{{ '1234567890'|truncatechars:2 }}
结果:1...
# truncatewords 以空格计算单词个数,保留n个单词
{{ '123 456 78 90'|truncatewords:2 }}
结果:123 456 …
# safe变量值是安全的,使HTML字符串转义,link = "超链接
"
{{ link }}
{#结果:超链接
#}
{{ link|safe }}
结果:超链接
# date 格式化日期,传入的是datetime.datetime.now()
{{ dt|date:"Y-m-d H:i:s" }}
# 结果:2019-10-11 14:58:16
{{ dt|date }}
# 结果:Oct. 11, 2019
# slice切片:
{{ '0123456'|slice:"0:3" }}
# 结果:0123
# filesizeformat,将数值转换为计算机单位
{{ 1000|filesizeformat }} # 1000 bytes
{{ 10000|filesizeformat }} # 9.8 KB
{{ 1000000000|filesizeformat }} # 953.7 MB
# default 如果前面的变量为空或不存在,显示默认值,不改变sname的值
{{ sname|default:'none' }}
# 结果: none
# length 返回长度
{{ 'abc'|length }} 2、自定义filter:
定义方式与simple_tag一样,调用方式不一样。
4固定原则:在APP中新建包名是固定:templatetags
在views中,Library实例化名字固定:register=template.Library()
HTML里调用格式固定
自定义函数,使用register.filter装饰
只能使用两个值,通常一个是修饰前,一个是修饰参数
使用:在HTML上方{% load 定义的python文件%}
调用:使用{{}}调用 ,格式:{{ str|filtername:args }}
# 在templatetags下新建python文件,custom_filter.py
from django import template # 导入template模块
register = template.Library() # 实例化,名字必须是register
@register.filter
def filter_ellipsis(str1, args1): # 最多两个参数
# 把str1截取args1长度并加...返回给前端
if len(str1) > args1:
str1 = str1[:args1] + r"..."
return str1在HTML中上方载入自定义的python文件
{% load custom_tag %}
{{ "01234567890123456789012345678901234567890123456789"|filter_ellipsis:20 }}
# 结果:
01234567890123456789...Filter与simple_tag区别:
1、HTML标记不一样,filter使用{{}},tag使用{%%}
2、filter可以在if/for里用于条件判断,tag不可以
3、filter最多传两个参数,tag可以多个
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:Django模板语言-2:simple_tag和filter-创新互联
标题来源:http://ndjierui.cn/article/csooop.html