模板路径
模板设置
1 TEMPLATES = [ 2 { 3 'BACKEND': 'django.template.backends.django.DjangoTemplates', 4 'DIRS': [os.path.join(BASE_DIR,'templates')], 5 'APP_DIRS': True, 6 'OPTIONS': { 7 'context_processors': [ 8 'django.template.context_processors.debug', 9 'django.template.context_processors.request', 10 'django.contrib.auth.context_processors.auth', 11 'django.contrib.messages.context_processors.messages', 12 ], 13 }, 14 }, 15 ]
模板查找顺序:优先在DIRS设置的目录下查找templates,如果没有, 'APP_DIRS': True时,继续在注册的app文件夹下查找相应的templates。
app注册后才能查找内部模板
1 #app注册 2 INSTALLED_APPS = [ 3 'teacher', # 注册teacherAPP 4 'django.contrib.admin', 5 'django.contrib.auth', 6 'django.contrib.contenttypes', 7 'django.contrib.sessions', 8 'django.contrib.messages', 9 'django.contrib.staticfiles', 10 ]
模板变量
模板变量命名:同变量命名规则,在遵循python的变量命名的规则的前提下,且不能以下划线(_)开头
1 def test(request): 2 # tp = get_template('teacher/index.html') 3 # html = tp.render() 4 # return HttpResponse(html) 5 def num(): 6 a = 1 + 2 + 3 7 return a 8 time = datetime.now() 9 li = [1,2,3] 10 dic = {'name': 'haha', 'age': 18} 11 tup = (1,2,3) 12 return render(request, 'teacher/index.html',context={ 13 'li': li, 14 'time': time, 15 'num': num, 16 'dic': dic, 17 'tup': tup, 18 })
html文件:
1 <body> 2 <p>变量a:{{ time }}</p> 3 <p>列表li:{{ li }}</p> 4 <p>列表中的值:{{ li.2 }}</p> 5 <p>函数num:{{ num }}</p> 6 <!--调用函数时,函数不能带参数--> 7 <!--调用函数、表达式时,会直接返回结果--> 8 <p>字典:{{ dic }},字典中的值:{{ dic.name }}</p> 9 <p>字典方法:{{ dic.keys }}</p> 10 <!--当属性/方法名与键名冲突时,优先调用键名--> 11 <p>元组:{{ tup }},值:{{ tup.1 }}</p> 12 </body> 13 <!--调用渲染失败是会返回空字符' '-->
运行结果:
变量time:Feb. 19, 2019, 3:17 p.m. 列表li:[1, 2, 3] 列表中的值:3 函数num:6 字典:{'name': 'haha', 'age': 18},字典中的值:haha 字典方法:dict_keys(['name', 'age']) 元组:(1, 2, 3),值:2
过滤器filter
常用模板过滤器 add 将参数与值相加 首先尝试转换成整数相加,失败,则尝试所有可能,字符串,列表等。 {{ value|add:"2" }}
capfirst 首字母大写,如果第一个字母不是字母则不起作用。 {{ value|capfirst }}
date 日期格式化 {{ value|date:"D d M Y" }} time 时间格式化 {{ value|time:"H:i" }} 格式化格式见官方文档: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#date
default 如果变量解析失败,使用给定的默认值。 {{ value|default:"nothing" }}(注意如果value是''空字符串,输出将会是'nothing')
first 返回列表的第一个元素 {{ value|first }}
last 返回列表的最有一个元素 {{ value|last }}
slice 返回一个列表的切片 {{ some_list|slice:":2" }}
join 连接字符串列表 与str.join(list)一样 {{ value|join:" // " }}
floatformat 浮点数格式化 不指定小数位参数,默认保留一个为小数 (四舍五入)
length 返回字符串或列表的长度
length_is 判断字符串或列表长度是否指定的值,相等返回True {{ value|length_is:"4" }}
lower 字符串中的字母都变小写{{ value|lower }}
upper 字符串中的字母都变大写{{ value|upper }}
safe 关闭变量的自动转义,使html标签生效{{ value|safe }}
title 标题化,首字母大写 {{ value|title }}
1 {#模板变量#} 2 <p>变量time:{{ time }}</p> 3 <p>列表li:{{ li }}</p> 4 <p>列表中的值:{{ li.2 }}</p> 5 <p>函数num:{{ num }}</p> 6 <p>字典:{{ dic }},字典中的值:{{ dic.name }}</p> 7 <p>字典方法:{{ dic.keys }}</p> 8 <p>元组:{{ tup }},值:{{ tup.1 }}</p> 9 {#过滤器#} 10 <p>add:a+b={{ a|add:b }}</p> 11 <p>capfirst:{{ li.3|capfirst }}</p> 12 <p>data:{{ time|date:'Y-m-d H:i:s' }}</p> 13 <P>default:{{ hhh|default:'nothing' }}</P> 14 <p>first:{{ li|first }}</p> 15 <p>last:{{ li|last }}</p> 16 <p>slice:{{ li|slice:'::-1' }}</p> 17 <p>join:{{ li|join:'00' }}</p> 18 <p>floatformat:{{ 3.1415926|floatformat:3 }}</p> 19 <p>length is 4:{{ li|length_is:4 }}</p> 20 <p>upper:{{ li.3|upper }}</p> 21 <p>title:{{ 'this is a test'|title}}</p> 22 <p>safe:{{ '<h1>666<h1>'|safe }}</p>
静态文件引入
(css,js,图片文件)
路径配置:settings文件中
# 引入文件时使用的目录 STATIC_URL = '/my_static/' # 静态文件的真实目录 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
1、硬编码:
<link rel="stylesheet" href="/my_static/teacher/index.css">
2、模板标签:(推荐)
<!--加载static--> {% load static %} <link rel="stylesheet" href="{% static 'teacher/css/index.css' %}">