Django框架之模板层
什么是模板
须要返回给浏览器的html文件html
Django的模板 = HTML代码 + 模板语言前端
模板语言
有与咱们直接返回html页面的话,那他只是一个静态页面没法实现先后端数据交互,那么咱们就须要通过页面渲染,让静态文件呈现出动态页面的效果。python
模板语言的变量
若是咱们须要将后端的数据传递到前端页面渲染,就须要用到模板语言中的变量数据库
用法:经过{{}}
来获取后端传递过来的数据
变量支持的数据类型:django
- int
- float
- str
- dict
- list
- tuple
- set
- bool
- function
- class
<strong style="color: red;font-size:30px">注:</strong>全部的数据类型只支持点取值,而且函数的值时函数的返回值而且不支持函数传值,类显示的是类的内存地址。后端
模板语言的过滤器
用来把视图传入的变量值加以修饰后再显示{{ 变量名|过滤器名:传递给过滤器的参数 }}
浏览器
经常使用过滤器
# default # 若是一个变量值是False或者为空,使用default后指定的默认值,不然,使用变量自己的值,若是value=''则输出默认的内容 {{ value|default:"默认内容" }} # length # 返回值的长度。它对字符串、列表、字典等容器类型都起做用 {{ value|length }} # filesizeformat # 将值的格式化为一个"人类可读的"文件尺寸变量的默认单位是字节 {{ value|filesizeformat }} # date #做用:将日期按照指定的格式输出 {{ value|date:"指定格式" }} # slice # 对输出的字符串进行切片操做,顾头不顾尾 {{ value|slice:"0:2" }} # truncatechars # 显示指定的字符数量,若是大于指定数量,那么会被截断,截断的字符串将以省略号(“...”),而且省略号也占字符数量 {{ value|truncatechars:8 }} # truncatewords # 与truncatechars相同,但truncatewords是按照单词截断,末尾的3个点不算做单词 {{ value|truncatewords:2 }} # safe # 出于安全考虑,Django的模板会对HTML标签、JS等语法标签进行自动转义,交给浏览器后会被解析成普通字符,但若是咱们就想让模板变量{{ value }}被渲染的结果有语法意义,那么就用到了过滤器safe {{ value|safe }}
模板语法的标签
for标签
# 遍历每个元素: {% for li in lis %} <p>{{ li }}</p> {% endfor %} # 能够利用{% for li in lis reversed %}反向循环。 # 遍历一个字典: {% for key,val in dic.items %} <p>{{ key }}:{{ val }}</p> {% endfor %} # 循环序号能够经过{{ forloop }}显示 forloop.counter 当前循环的索引值(从1开始) forloop.counter0 当前循环的索引值(从0开始) forloop.revcounter 当前循环的倒序索引值(从1开始) forloop.revcounter0 当前循环的倒序索引值(从0开始) forloop.first 当前循环是第一次循环则返回True,不然返回False forloop.last 当前循环是最后一次循环则返回True,不然返回False forloop.parentloop 本层循环的外层循环 # for标签能够带有一个可选的{% empty %} 从句,在变量person_list为空或者没有被找到时,则执行empty子句 {% for li in lis %} <p>{{ li }}</p> {% empty %} <p>lis为空</p> {% endfor %}
if标签
# 注意: {% if 条件 %}条件为真时if的子句才会生效,条件也能够是一个变量,if会对变量进行求值,在变量值为空、或者视图没有为其传值的状况下均为False # 语法 {% 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判断。
with标签
# with标签用来为一个复杂的变量名起别名,若是变量的值来自于数据库,在起别名后只须要使用别名便可,无需每次都向数据库发送请求来从新获取变量的值 {% with li.1.upper as v %} {{ v }} {% endwith %}
自定义过滤器和标签
前提:
-
在应用中建立templatetags(只能是这个名称)安全
-
在文件夹中建任意.py文件框架
-
在文件中添加两条语句函数
from django import template register = template.Library()
而后咱们就可以自定义过滤器与标签了
自定义标签
@register.simple_tag def my_multi_tag(v1, v2): # 自定义的标签能够定义多个参数 return v1 * v2
自定义过滤器
@register.filter def my_multi_filter(v1 ,v2): # 自定义的过滤器只能定义最多两个参数 # 针对{{ value1 | 过滤器名称:value2 }},参数传递为v1=value1,v2=value2 return v1 * v2
模板的导入和继承
在一个模板文件中,引入或重用另一个模板文件的内容
模板的导入
{% include '模版名称' %}
模板的继承
{% extends "模版名称" %} # 也就是说include有的功能extends全都有,可是extends能够搭配一个block标签,用于在继承的基础上定制新的内容
若是要继承模板的内容并定制新内容须要在继承模板中定义定制区域(使用block标签)