上次我们初始模板,能够将模板渲染出来,这次我们将学会如何给模板传参,模板变量如何解析,以及如何将css等静态文件引用成功。
- 模板路径查找
- 模板变量介绍
- 模板变量解析规则
- 模板过滤器
- 静态文件引用
1、模板路径查找
查找顺序
模板路径的查找,先从DIRS里查找,再从INSTALLED_APPS里面从上到下查找,因此templates的优先级要比APP下面templates的优先级高。
注:APP下面templates的名称不能改变,否则就查找不到
为什么在templates文件夹下创建APP类
因为同名的HTML会很多,而在django中,只要找到一个符合的模板,就返回,所以建APP,方便管理,也防止被覆盖。
2、模板变量介绍
静态页面:随着时间、交互页面是不变的。
动态页面:随着时间、交互页面是变化的。
rander:动态的将模板渲染出来
模板变量
命名:不能以下划线开头,不能用空格和标点符号,不能跟Python关键字相同。
语法:context中传入字典
now=datetime.now() #now是datetime类的一个实例,然后返回的是print这个实例
return render(request,'student/index.html',
context={
'now' : now
})
在模板中使用变量:{{ 里面写key值 }} 变量的值可以是任何的数据类型
<h3>当前时间{{ now }}</h3>
记得上传,成功即可访问
3、模板变量解析规则
(1)计算变量,将其替换为结果,
· (2)遇到点 . 时,按以下顺序查找
1、字典键值查找
2、属性或方法查找
3、数字索引查找
(3)如果结果是可调用的,则调用它时不带参数。调用的结果成为模板的值。
**如果渲染失败则返回空
下面看一些例子吧
设各种类型变量并渲染
def new(request):
now=datetime.now()
ls=[1,3,5,7,9,33]
gk={'name':'job','age':19,'sex':'male'}
def func():
return '我是一个函数'
cn=(22,55,66)
tp='往后余生,全都是你'
return render(request,'student/index.html',
context={
'now' : now,
'ls':ls,
'gk':gk,
'fun':func,
'cn':cn,
'tpo':tp
})
模板使用变量:
<h1>欢迎来到web前端</h1>
<h1>我是studentAPP里面的</h1>
<h3>当前时间{{ now }}</h3>
<h3>我是字典:{{ gk }}</h3>
<h3>我是字典里的值:{{ gk.name }}</h3>
<h3>我是列表里的一个值:{{ ls.3 }}</h3>
<h3>我是函数 : {{ fun }}</h3>
<h3>我是元组里的值 : {{ cn.0 }}</h3>
<h3>我是字符里的值 : {{ tpo }}</h3>
访问结果:
4、模板过滤器()
作用:对变量进行过滤。在真正渲染之前,过滤器会根据功能处理好变量,然后的出结果后再替换掉原来变量展示出来。
{{ 变量 | lower }} 过滤器名写竖杠 | 后面
管道符号课进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。
{{变量 | lower | capfirst}}
使用参数:过滤器可以使用参数,在过滤器后面使用冒号‘:’再加上参数,比如要把一个字符串中所有的空格去掉,可以使用cut过滤器。
{{变量 | cut:“ ”}}
{{变量 | 过滤器 :“参数”}}
一些常用的过滤器:
(1)add 字符串相加,数字相加,列表相加,如果失败,返回空字符
{{ value | add: "2"}} 将value的值增加2
(2)addslashes
{{ value | addslashes }} 在value中的引号前增加反斜线
(3)capfirst 首字母大写
(4)cut
从给定value中删除所有arg的值
(5)date
将日期格式数据按照给定的格式输出
(6)default
{{ value | default: "nothing" }},例如,如果value是“”,那么输出将是nothing
如果value的意义是False,那么输出使用缺省值
(7)default_if_none
{{ value | default_if_none:"nothing" }},例如,如果value是None,那么输出将是nothing
如果value是None,那么输出将使用缺省值
(8)first 返回列表中的第一个值
(9)join 使用形式:{{ value | join:"arg"}},如果value是['a','b','c'],arg是'//'那么输出是a//b//c 意义:使用指定的字符串连接一个list
(10)last 返回列表中的最后一个值
(11)length 返回value的长度。 (12)length_is {{ value | length_is:"arg"}} 返回True,如果value的长度等于arg的时候,例如:如果value是['a','b','c'],arg是3,那么返回True 意义:显示的文本,带有行数
(13)lower
将一个字符串转换成小写形式
(14)safe 使用形式:{{value | safe}} 意义:当系统设置autoescaping打开的时候,该过滤器使得输出不进行escape转换
(15)striptags 删除value中的所有HTML标签
(16)title
转换一个字符串成为title格式。
(17)truncatewords
{{value | truncatewords:2}}
将value切成truncatewords指定的单词数目
(18)time 格式化时间
5、静态文件引用
路径的配置
在settings.py中,
找到 STATIC_URL = '/static/'
输入 STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
在项目中,创建static文件夹,专门放静态文件,
然后,建APP文件夹,在APP文件夹内,建css、img、js文件夹来分类放置静态文件。
静态文件的引入
way1:硬编码
硬编码:通过STATIC_URL 不推荐使用
<link rel="stylesheet" href="/static/student/css/index.css">
static为STATIC_URL 的值,可以改变。
student/css/index.css为static文件下的路径。
way2:模板标签(推荐)
{% load static %}在HTML开头写上
引用:<link rel="stylesheet" href={% static 'student/css/index.css' %} >
'student/css/index.css' 为static下的路径。
模板变量就学习到这里,下节我们学习模板标签,和模板的继承。