Django模板语言-2:simple_tag和filter-创新互联

标签simple_tag:

栾城ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

标签:在HTML中使用{% %}标记

常见的系统内自带的标签:load、for 、if、with、csrf_token、verbatim、

block-endblock\extends\comment-endcomment\cycle(silent)\自定义标签

1、with:

在html里给变量赋值

{% with name=obj.group.name%}        # 用于长变量赋值 {{name}}                           # 直接调ip,显示host.name.ip的值

2、csrf_token:

之前在使用form表单时,提示Forbidden:CSRF verification failed. Request aborted,

解决方法1、在settings里注释掉中间件CSRF

解决方法2、在form表单里添加csrf_token标签

{% csrf_token %} {#使用此句,无需注释掉中间件的CSRF#}       

3、verbatim

取消渲染模板标记,以文字显示verbatim里面的内容

{% verbatim %}     {{ for i in [1,2,3,4] }}     {{ i }}     {{ endfor }} {% endverbatim %} 网页显示结果:  {{ for i in [1,2,3,4] }} {{ i }} {{ endfor }}

4、autoescape、识别、不识别含有html标签的字符串,默认不识别html标签,与过滤器safe,django的mark_safe作用一样    

参数:on、off,默认on

html_str = "点我" {% autoescape off %}     {{ html_str }} {% endautoescape %} # 结果: 点我 {% autoescape off %}     {{ html_str }} {% endautoescape %} # 结果: 点我

5、comment注释

{% comment %}     此段内容不显示在网页上 {% endcomment %}

6、cycle,循环迭代,重复1到4,遇到resetcycle,重新从1开始,silent使用上一个值

{% cycle '1' '2' '3' '4' as num%} {% cycle num %} {% cycle num silent %}        # 重复输出2 {% resetcycle %} {% cycle num %} {% cycle num %} {% cycle num %} {% cycle num %} # 应用场景:隔行变色 {% for i in list%} 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-创新互联
URL链接:http://myzitong.com/article/csooop.html