{{ 变量 | 过滤器1:参数值1 | 过滤器2:参数值2 ... }}
从语法格式我们可以得知过滤器使用|管道符进行变量与过滤器之间的连接,过滤器的可以通过组合多个过滤器实现链式调用,目前过滤器最多接受一个参数。经常使用的过滤器如下表所示:| 过滤器 | 使用说明。 |
| length | 获取变量的长度,适用于字符串和列表。 |
| lower/upper | 转换字符串为小写/大写形式。 |
| first/last | 获取变量的首个/末尾元素。 |
| add:'n' | 给变量值增加 n。 |
| safe | 默认不对变量内的字符串进行html转义。 |
| cut | 从给定的字符串中删除指定的值。 |
| dictsort | 获取字典列表,并返回按参数中给定键排序的列表。 |
| join | 用字符串连接列表,例如 Python 的 str.join(list)。 |
| truncatewords | 如果字符串字符多于指定的字符数量,那么会被截断。 截断的字符串将以可翻译的省略号序列(“...”)结尾。 |
In [1]: from django.template import Template,Context
In [2]: t=Template("""
...: <p>hello:{{world|length}}</p>
...: """)
...: t.render(Context({'world':'you'}))
Out[2]: '\n<p>hello:3</p>\n'
Django shell 是 Django 提供的交互模式,可以在交互模式下使用项目工程的代码执行相应的操作,从而代替编写视图函数,这样便于测试操作,同时也可以使用它来进行 model 数据表的增删改查,但不能进行过于复杂的操作,它的启动命令是 python manage.py shell。
模板变量 world 使用管道符连接 length 过滤器,最终得到了变量对应值 you 的字符串长度为 3。同时 world 变量的值也可以是列表或者字典,是列表那么将返回列表长度,是字典将返回字典 key 的个数,如若没有定义变量则返回 0。
{{ value|truncatewords:2 }}
参数是要截取的字符数量,此处为 2,如果 value 是 "Django is website" ,则输出为"Django is …",实例代码如下:
In [1]: from django.template import Template,Context
In [2]: t=Template("""
...: <p>hello:{{value|truncatewords:2}}</p>
...: """)
...: t.render(Context({'value':'Django is website'}))
Out[2]: '\n<p>hello:Django is …</p>\n'
In [1]: from django.template import Template,Context
In [2]: t=Template("""
...: <p>hello:{{value|dictsort:"num"}}
...: """)
...: t.render(Context({'value':[
...: {'name': 'C语言中文网', 'num':2 },
...: {'name': 'Django官网', 'num': 1},
...: {'name': 'Python官网', 'num': 3},
...: ]}))
Out[2]: '\n<p>hello:[{'name': 'C语言中文网', 'num': 1}, {'name': 'Django官网', 'num': 2}, {'name': 'Python官网', 'num': 3}]\n'
从输出的结果可以看出 dictsort 过滤器对指定的键 num 做了排序处理。当然过滤器也可以与模板标签配合使用,这种属于综合的使用方法,实例如下:
In [1]: from django.template import Template,Context
In [2]: t=Template("""
...: {% for book in books|dictsort:"author.age" %}
...: {{ book.title }} ({{ book.author.name }})
...: {% endfor %}
...: """)
...: t.render(Context({'books':[
...: {'title': 'C语言教程', 'author': {'name': 'ycs', 'age': 14}},
...: {'title': 'Python教程', 'author': {'name': 'xxw', 'age': 17}},
...: {'title': 'Django教程', 'author': {'name': 'ccs', 'age': 16}},
...: ]}))
Out[2]: '\n\n C语言教程 (ycs)\n\n Django教程 (ccs)\n\n Python教程 (xxw)\n\n'
提示:' 是单引号 HTML 转义后的十进制格式,39 是单引号的 ASCII 编码值。使用 Context 方法的 autoescape=False 参数可以关闭自动转义。
In [1]: from django.template import Template,Context
#整形相加强制转换
In [2]: t=Template("""
...: {{value|add:2 }}
...: """)
...: t.render(Context({'value':'5'}))
Out[2]: '\n7\n'
#列表相加
In [3]: t=Template("""
...: {{value|add:list}}
...: """)
...: t.render(Context({'value':['python','Django','Flask'],'list':['Tonado','celery']}))
Out[3]: '\n['python', 'Django', 'Flask', 'Tonado', 'celery']\n'
add 过滤器将首先尝试将两个值都强制转换为整数。如果失败,它将尝试将所有值加在一起。这将对某些数据类型(如字符串,列表等)起作用,而对其他数据类型则失败。如果失败,结果将为空字符串。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有