Django资料之模板标签和过滤器

◆ 标签语法:

{% tag %}
    ...内容
{% endtag %}

1、for标签:

{% for key,val in dic.items %}
    <p>{{ key }}:{{ val }}</p>
{% endfor %}
forloop.counter            当前循环的索引值(从1开始),forloop是循环器,通过点来使用功能
forloop.counter0           当前循环的索引值(从0开始)
forloop.revcounter         当前循环的倒序索引值(从1开始)
forloop.revcounter0        当前循环的倒序索引值(从0开始)
forloop.first              当前循环是不是第一次循环(布尔值)
forloop.last               当前循环是不是最后一次循环(布尔值)
forloop.parentloop         本层循环的外层循环的对象,再通过上面的几个属性来显示外层循环的计数等

循环序号可以通过{{forloop}}显示

2、if标签

if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断,注意条件两边都有空格。
{% if num > 100 or num < 0 %}
    <p>无效</p>  <!--不满足条件,不会生成这个标签-->
{% elif num > 80 and num < 100 %}
    <p>优秀</p>
{% else %}  <!--也是在if标签结构里面的-->
    <p>凑活吧</p>
{% endif %}

3、with标签

用于给复杂变量赋值

{% with total=business.employees.count %}
    {{ total }} <!--只能在with语句体内用-->
{% endwith %}

◆ 过滤器的语法:

  1. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
  2. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
  3. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:’, ’ }}
  4. 变量|函数,意思是将变量交给函数处理,使用管道符"|"来应用过滤器,’|'左右没有空格
 {{ value|filter_name:参数 }}

◆ 过滤器方法使用:

1、default:

{{ value|default:"nothing"}}  #如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。

2、length

{{ value|length }}  #返回值的长度,作用于字符串和列表

3、filesizeformat

{{ value|filesizeformat }}  #将值格式化为文件尺寸(例如 '13 KB', '4.1 MB', '102 bytes', 等等)

4、slice

{{value|slice:"2:-1"}} #切片

5、date

#格式化,如果 value=datetime.datetime.now()
{{ value|date:"Y-m-d H:i:s"}}

6、safe

#让链接value = "<a href='#'>点我</a>" 渲染,加上safe
{{ value|safe}}

7、truncatechars

#字符截断,多余的使用...来表示
{{ value|truncatechars:9}} #注意:最后那三个省略号也是9个字符里面的

8、truncatewords

#截多少个单词(通过空格截断)
{{ value|truncatewords:3}} 
#例如:‘hello girl hi baby yue ma’,结果是 'hello girl h1...'

9、cut

{{ value|cut:' ' }}  #移除value中的所有空格

10、join

使用字符串连接列表,{{ list|join:', ' }},就像Python的str.join(list)

11、add

#value后边添加2
{{ value|add:"2" }}  

12、urlencode

{{ obj|urlencode }} #将obj编码  http://www.baidu.com/ ->http%3A//www.baidu.com

◆ 自定义filter和simple_tag:

1.在当前app中创建templatetags目录(templatetags名称固定)

2.在templatetags中创建.py文件,如my_tags.py

from django import template    
from django.utils.safestring import mark_safe
register = template.Library()   #register的名字是固定的,不可改变

#1.register.filter 
@register.filter
def filter_multi(v1,v2):
    return  v1 * v2

#2.register.simple_tag
@register.simple_tag            
def simple_tag_multi(v1,v2):
    return  v1 * v2

@register.simple_tag
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    return mark_safe(result)   #mark_safe保证生成标签        

3.在html中导入之前创建的my_tags.py:{% load my_tags%}

4.使用filter和simple_tags

{% load xxx %}   #首行
    
1.使用filter,最多能传2个参数    
{{ num|filter_multi:2 }} #24 <!---最多2参数,能放在if for语句中--->  
{{ num|filter_multi:"[22,333,4444]" }}

2.使用simple_tag,能传多个参数
{% simple_tag_multi 2 5 %}  <!---参数不限,但不能放在if for语句中--->
{% simple_tag_multi num 5 %}

自定义filter和simple_tag区别:

1.filter最多传2参数,simple_tags能传多个参数
2.filter的调用可写在for/if语句中,simple_tags不可
{% if num|filter_multi:30 > 100 %}
    {{ num|filter_multi:30 }}
{% endif %}

更详细信息请参考:https://www.cnblogs.com/gaoyukun/p/8999315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值