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