模板变量,过滤器和静态文件引用
模板路径
- Djiango先到settings里面找templates下的DIRS查看是否有路径,也是从上往下依次寻找,找到就返回。
- 如果DIRS没有,就到APP_DIRS里面寻找。但是APP要先在INSTALLED_APPS里面进行注册然后根据INSTALLED_APPS里面从上往下顺序依次寻找。
模板变量
- 动态页面:随时间改变会改变相应数据内容等(并不是JS就是动态页面)
静态页面:反之
语法:{{变量名}},变量名命名规则和py变量一样,但是却不能以下划线_开头;注意避免关键字。
例如编写显示时间:
from datetime import datetimedef index(request):now = datetime.now()return render(request,'teacher/index.html',context={'now' : now})#HTML
<p>当前时间是:{{now}}</p>
#注意,俩个大括号里面的now对应的是context里的key的now
此时显示的时间并不是北京时间,要进行修改。
到项目目录下的settings里面最下面的TIME_ZONE = 'UTC'
进行修改
改为TIME_ZONE = 'Asia/Shanghai'
(不要问我为什么不是Beijing,改成Beijing会报错,毕竟上海比较有名吧,估计是历史原因)
修改之后:
关于模板变量的解析
- 列表list
lt = [0,1,2]return render(request,'teacher/index.html',context={'lt':lt})#HTML
<p>传递的列表是:{{ lt }}</p>
<p>列表下标是1的元素是:{{ lt.1 }}</p>
说明:
传递列表的时候获取某个元素要使用list_name.索引的形式进行获取
结果如图:
- 字典
dt = {'name' : '小明','age' : 1}return render(request,'teacher/index.html',context={'dt':dt})#HTML
<p>传递的字典是:{{ dt }}</p>
<p>传递的字典['name']是:{{ dt.name }}</p>
说明:同样是通过dt_name.key的形式获取某个value
结果如图:
- 函数
def func():return 'Hello world'return render(request,'teacher/index.html',context={'func':func})#HTML
<p>传递的func是:{{ func }}</p>
说明:
函数不能设置有参数,只能设置无参数函数。因为在解析的时候解析的是变量名,而变量名是不可以携带变量的。
结果如图:
变量解析规则
- 当模板引擎遇到了变量时,会计算该变量,并以结果替换之
- 当模板引擎遇到了变量时,按照以下顺序尝试查找:
- 字典键值查找
- 属性或方法查找
- 数字索引查找
- 如果结果是一个可调用的(callabled),则调用他,结果为模板变量的值
解释:
- 如果ret = 1+1,的时候,解析出来的结果会用2代替1+1
- 字典.方法名,会解析出来方法的返回值;但是如果字典里面含有和方法重名的key的时候,会按照顺序,解析为所对应的value
- 调用函数
常用的过滤器
现在先介绍内置过滤器(自定义以后聊)
过滤器:
- 语法:{{fruits|lower}}
- 作用: 对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。
- 管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。{{fruits|lower|capfirst|..|..}
- 使用参数:过滤器可以使用参数,在过滤器名称后面使用冒号”:”再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器,{{fruits|cut:" "}}
语法:{{变量名|过滤器}}
例如:
- 时间的:{{name|date:"D d M Y"}}
- 列表的:
- name|add:数字
- name|first/last
- name|slice:"num:num"
注意:不要习惯性在冒号俩边加上空格,会报错
常用的过滤器:
date和time过滤器格式:
静态文件的引用
路径设置
静态文件由内建APP'django.contrib.staticfiles'管理,调试用到,实际使用不会用到
django.contrib.staticfiles这个app被包含在INSTALL_APPS中
配置语法:
#setting.py
STATICFILES_DIRS = []
步骤:
- 在项目根目录下创建一个static,注意要分APP文件夹
- 写入
STATIC_URL = '/static/'
(默认就有) - 在settings最下面加入
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
静态文件引用
{% load static %}#写在模板顶部#导入的时候
src = "{% static 'app_name/img/name.jpg' %}"
如此类推