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  # 本层循环的外层循环

 

posted @ 2019-01-25 19:28  小清是胖子  阅读(98)  评论(0编辑  收藏  举报