Django模板系统
在Django的模板语言中 只需要记两种特殊符号 :
- 和变量相关的用 {{ }}
- 和逻辑相关的用 {% %}
常用的语句有如下这些
1 for循环: 2 {% for i list %} 3 {{ forloop.counter }} : 当前循环的次数 4 {{ forloop.last }} : 循环的最后一次 5 {{ i }} 6 {% endfor %}
7 if判断: 8 {% if a>b %} 9 ... 10 {% else %} 11 ... 12 {% endif %}
13 if....in判断: 14 {% if a in list %} 15 ... 16 {% endif %} 17 {# 取列表中的第一个参数 #} 18 {{ list.0 }} 19 {# 取字典中key的值 #} 20 {{ dic.name }} 21 {# 取对象的name属性 #} 22 {{ obj.name }} 23 {# .操作只能调用不带参数的方法 #} 24 {{ obj.dream }}
filters
有时候我们从后端取到的数据并不是我们可以直接使用的 这时我们就需要用到 filter 可以帮我们做一些过滤的操作
语法是这样的 {{ value|filter_name:参数 }} value哪里填写我们需要用来过滤的数据 中间用 | 分开
注意 : 前后不能有空格
接下来我们来看下Django为我们提供了哪些 filter_name
1 如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。 2 {{ value|default:"nothing"}} 3 4 返回值的长度,作用于字符串和列表。 5 {{ value|length }} 6 7 将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等) 8 {{ value|filesizeformat }} 9 10 切片 ( 可以切片列表和字符串) 11 {{value|slice:"2:-1"}} 12 13 格式化时间格式 14 {{ value|date:"Y-m-d H:i:s"}} 15 16 告诉django 这个是安全的 不需要转义 17 例如:value = "<a href='#'>点我</a>" 18 {{ value|safe}} 就不会把这个标签直接显示 会作为标签的形式显示 19 20 在一定数量的字后截断字符串,这里的数量是按照英文来计算的 21 {{ value|truncatewords:9}} 22 23 移除value中所有的与给出的变量相同的字符串 24 {{ value|cut:' ' }} 25 如果value为'i love you',那么将输出'iloveyou'.
很多时候我们还需要根据我们的需要 做一些自定义操作 如下:
1 自定义filter代码文件摆放位置: 2 app01/ 3 __init__.py 4 models.py 5 templatetags/ # 在app01下面新建一个package package 6 __init__.py 7 app01_filters.py # 建一个存放自定义filter的文件 8 views.py
9 编写自定义的filter方法: 10 from django import template 11 register = template.Library() 12 13 14 @register.filter(name="cut") 15 def cut(value, arg): 16 return value.replace(arg, "") 17 18 19 @register.filter(name="addSB") 20 def add_sb(value): 21 return "{} SB".format(value)
22 使用自定义的filter方法: 23 {# 先导入我们自定义filter那个文件 #} 24 {% load app01_filters %} 25 26 {# 使用我们自定义的filter #} 27 {{ somevariable|cut:"0" }} 28 {{ d.name|addSB }}
for循环中可用的参数:
1 forloop.counter #当前循环的索引值(从1开始) 2 forloop.counter0 # 当前循环的索引值(从0开始) 3 forloop.revcounter # 当前循环的倒序索引值(从1开始) 4 forloop.revcounter0 # 当前循环的倒序索引值(从0开始) 5 forloop.first # 当前循环是不是第一次循环(布尔值) 6 forloop.last # 当前循环是不是最后一次循环(布尔值) 7 forloop.parentloop # 本层循环的外层循环