03模板变量及模板过滤器
1.模板路径的查找
-
查找顺序(两种位置)
- 首先查找 settings.py 中的TEMPLATES的’DIRS’
- 当’APP’ = True时 会去INSTALLED_APPS列表中查找 app目录下的模板
-
模板的位置(两种方案)
- 当大项目时,集中部署时,模板的位置在项目根目录下
- 当app可以复用的时候,给多个项目使用,模板的位置在app目录下
-
方案1时,为什么在templates文件夹下还要建立app文件夹?
-
按照顺序查找,找到一个符合的模板就返回
-
所以为了防止不同app中同名模板的覆盖
-
2.模板变量
- 静态页面,动态页面
- 不随时间改变,不随客户端不同而改变的页面为静态页面,不存在交互
- 随着时间改变,随着客户端改变,访问者改变而改变的页面为动态页面,存在交互
- 模板变量:在render函数中,可以传递一个变量,将变量的值渲染到模板中(名不能用下划线开头)
- 在render()中加一个参数context={},传递一个字典,键为模板中引用的名字 ,值为变量名
- 例如在render函数中传递context={‘now’:now}
- 则在html模板中则可以引用{{now}},这里的now指的是context中的’now’
- 对应某个app的某个方法中定义的now变量
- 模板变量的解析规则
- 计算变量,将其替换为结果
- 遇到点(.)的时候,按以下顺序查找
- 字典键值查找
- 属性或方法查找
- 数字索引查找
- 如果变量为可调用的(函数),则调用它的时候不带参数,调用的结果成为模板的值
- 渲染失败,则返回空
3.模板过滤器 filter 对模板变量进行操作
- 常用模板过滤器 语法{{变量 | 过滤器:参数|过滤器:参数|······}},
- add: 将变量与值相加 首先尝试整数相加,失败后尝试其他可能(字符串拼接,列表拼接)
- capfirst 首字母大写,值的首位不是字母无效
- date: 日期格式化,按照格式填充日期 ‘Y年m月d日 H时i分s秒’
- Y:四位数的年 如1999
- y:两位数的年 如99
- m:两位数的月 如01,09
- n:一位数的月 如 1,9,12
- d:两位数的日 如01,09,31
- j:一位数的日 如1,9,31
- g:12小时制的一位数的小时 如1 ,9,12
- G:24小时制的一位数的小时 如0 ,8,23
- h:12小时制的两位数的小时 如01,09,12
- H:24小时制的两位数的小时 如01,08,23
- i: 分钟 00 -59
- s: 秒 00-59
- time 时间格式化,按照格式填充时间,只有时分秒
- default: 变量渲染失败时,返回default的参数,注意:变量本来就返回’'时,也会返回参数
- first 返回列表的第一个元素
- last 返回列表的最后一个元素
- slice:’ : : ’ 返回列表的切片
- join:’ ’ 字符串拼接
- floatformat:小数点位数 浮点数格式化,不指定则默认保留一位小数
- length 返回字符串或列表的长度
- length_is:number 返回布尔值,列表的长度是否为number
- lower 字符串全部小写
- upper 字符串全部大写
- title 所有空格隔开d的单词首字母大写
- safe 关闭模板引擎对变量(html,css,js)的自动转义,使得标签有效
- xss (跨域脚本攻击)
- 为了防止变量作为标签语言(html,css,js)对网页进行跨域脚本攻击,django模板引擎默认将变量为这些内容的,在渲染时将标签<>转义回<,>,防止其对模板产生作用
- 利用safe过滤器,可以将信任的变量通过safe过滤器,取消模板引擎的转义
4.静态文件 (css,js,images)
-
路径配置
-
STATICFILES_DIRS = [os.path.join(BASE_DIR,static)]
-
STATIC_URL
-
-
静态文件的引入
- 硬编码 通过STATIC_URL
- 模板标签动态引入,此时无论STATIC_URL为什么都不影响,可以隐藏路径
- html文档开头加载static文件夹: {% load static %}
- link标签的href="{% static ‘相对路径’ %}"