【1】模板之变量
在Django模板中要想使用变量关键是使用点语法。
获取值的语法是:{{ 变量名 }}
Python中所有的数据类型包括函数,类等都可以调用
【2】模板之过滤器
- 过滤器语法
- {{ obj | filter_name:param }}
- obj:变量名字,filter_name:过滤器名称,param:变量
- {{ obj | filter_name:param }}
- default过滤器
- 如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值
- 语法:{{ value | default:'onthing' }}
- length过滤器
- 返回值的长度。对列表和字符串都起作用
- 语法:{{ value | length }}
- filesizeformat过滤器
- 将值格式化为一个人类可读的文件尺寸(例如:13KB,4.1MB等)
- 语法:{{ value | filesizeformt }}
- date过滤器
- 如果value=datetime.datetime.now(),返回当前的时间
- 语法:{{ value | date:"Y-m-d" }}
- slice过滤器
- 切分,如果value=' helloworld '
- 语法:{{ value | slice:"2:6"}}
- truncatechars过滤器
- 如果字符串多于指定的字符数量,那么会被截断。截断的字符串将以(.....)结尾
- 参数:要截断的字符数
- 语法:{{ value | truncatechars:6}}
- safe过滤器
- 取消对HTML标签和js等语法标进行自动转义
- 语法:{{ value | safe }}
在Django中有两种方法关闭HTML的自动转义:
1、通过safe过滤器
2、通过django内部的mark_safe方法:
pythonfrom django.utils.safestring import mark_safe def index(request): res = mark_safe('<a>hello</a>') return render(request,'index.html') '''然后在index.html中使用{{ res }}查看结果'''
【3】模板之标签
【3.1】for标签
for标签:遍历每一个元素
语法:
python# 循环一个字典 {% for user in user_dict %} <p>{{ user }}</p> {% endfor %} {% for key,value in user_dict.items %} <p>{{ key }}:{{ value }}</p> {% endfor %} {% for user in user_dict.items %} <p>{{ user }}</p> {% endfor %} {% for user in user_dict.keys %} <p>{{ user }}</p> {% endfor %} {% for user in user_dict.values %} <p>{{ user }}</p> {% endfor %} ''' items:拿到字典key值和value值 keys:只拿到字典的key值 value:只拿到字典的value值 ''' {% for user in user_dict %} <p>{{ forloop }}</p> {% endfor %} ''' 循环序号可以通过{{forloop}}显示 指定{{forloop}}后会打印出以下的值 {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 3, 'revcounter0': 2, 'first': True, 'last': False} counter0:代表的是索引数 counter:代表是的顺序 first:代表的第一个 last:代表的最后一个 '''
【3.2】for......empty标签
for标签带有一个可选的{% empty %} 从句,以便在循环的对象为空或者没有找到时,可以有所操作
语法:
python{% for person in person_list %} <p>{{ person.name }}</p> {% empty %} <p>sorry,no person here</p> {% endfor %} ''' person_list为空或者找不到时会执行{% empty %}中的p标签的执行 '''
【3.3】if标签
{% if %}会对一个变量求值,如果它的值是True(存在,不为空,且不是false),对应的内容块会输出。总而言之就是和python中的if语句使用方法类似
语法:
pythondef index(request): num=89 return render(request,'index.html') {% if num > 100 or num < 0 %} <p>无效</p> {% elif num > 80 and num < 100 %} <p>优秀</p> {% else %} <p>凑活吧</p> {% endif %}
if语句支持 and、or、==、>、<、!=、<=、>=、in、not in、is、is not判断
【3.4】with标签
使用一个简单的名字缓存一个复杂的变量,简而言之就是起别名
语法:
pythondef index(request): d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,333,{'info':'NB'}]} return render(request,'index.html') # with起别名 {% with d.hobby.3.info as nb %} <p>{{ nb }}</p> 在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式 <p>{{ d.hobby.3.info }}</p> {% endwith %}
【4】模板之导入
- 模板导入就是将一个html文件导入到另一个html文件之中
- 语法
- {% include ' 模板名称 ' %}
- 在导入文件中写导入
【5】模板之继承
模板继承可以让您继承另一个模板的所有元素,还可以定义能够被字模板覆盖的block
- 继承的语法:
- {% extends '被继承的模板' %}
block标签定义了3个可以被字幕版内容填充的block。block模板告诉模板引擎:字幕版可能会覆盖掉模板中的这些位置
block独立块的语法:
{% block 名字(随意) %}
''要覆盖的内容''
{% endblock %}