查找顺序(两种位置)
首先查找 settings.py 中的TEMPLATES的‘DIRS‘
当‘APP‘ = True时 会去INSTALLED_APPS列表中查找 app目录下的模板
模板的位置(两种方案)
当大项目时,集中部署时,模板的位置在项目根目录下
当app可以复用的时候,给多个项目使用,模板的位置在app目录下
方案1时,为什么在templates文件夹下还要建立app文件夹?
按照顺序查找,找到一个符合的模板就返回
所以为了防止不同app中同名模板的覆盖
静态页面,动态页面
不随时间改变,不随客户端不同而改变的页面为静态页面,不存在交互
随着时间改变,随着客户端改变,访问者改变而改变的页面为动态页面,存在交互
模板变量:在render函数中,可以传递一个变量,将变量的值渲染到模板中(名不能用下划线开头)
在render()中加一个参数context={},传递一个字典,键为模板中引用的名字 ,值为变量名
例如在render函数中传递context={‘now‘:now}
则在html模板中则可以引用{{now}},这里的now指的是context中的‘now‘
对应某个app的某个方法中定义的now变量
模板变量的解析规则
计算变量,将其替换为结果
遇到点(.)的时候,按以下顺序查找
字典键值查找
属性或方法查找
数字索引查找
如果变量为可调用的(函数),则调用它的时候不带参数,调用的结果成为模板的值
渲染失败,则返回空
常用模板过滤器 语法{{变量 | 过滤器:参数|过滤器:参数|······}},
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过滤器,取消模板引擎的转义
路径配置
STATICFILES_DIRS = [os.path.join(BASE_DIR,static)]
STATIC_URL
静态文件的引入
硬编码 通过STATIC_URL
html文档开头加载static文件夹: {% load static %}
link标签的href="{% static ‘相对路径‘ %}"
原文:https://www.cnblogs.com/zonexxlcode/p/11388901.html