一、模板的使用
- 模板的作用:调用HTML前端页面
- 模板的存放:
①:在项目主目录下创建一个名为templates的目录用来存放所有的HTML模板文件
②:在templates目录下再创建以各个app名字命名的目录来存放各个app中的模板文件
③:项目目录下settings.py中的模板路径配置TEMPLATES = [ 'DIR': [os.path.join(BASE_DIR, 'templates')], # 当APP_DIRS为True时会到app目录下的templates中查找模板,app需先注册 'APP_DIRS': True, ]
- 模板的渲染(在视图函数中)
① 硬编码方式:
② 使用render进行渲染:def index(request): return HttpResponse('<h1>Hello, world!!!</h1>')
from django.shortcuts import render def index(request): return render(request, 'student/index.html')
二、模板变量的使用
- 使用规则:
① 语法:{{ 变量名 }}
② 命名由数字、字母、下划线组成,但不能以下划线开头,不能有空格和标点符号
③ 可以使用字典、方法、函数、列表,不要使用python、django的关键字进行命名
④ 当模板变量为一个字典时且它有items这个key时,当访问data.items时将会访问data中这个items key,而不是items方法,变量名中(’.’)表示查找 - 案例
① 在views.py中
② 在index.html中def index(request): li = [1, 2, 3] def func(): return '我是个函数' return render(request, 'student/index.html', context={'li': li, 'func': func})
③ 浏览器中访问效果:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index page</title> </head> <body> <p>这是一个列表:{{ li }}</p> <p>我是列表的第二个元素:{{ li.1 }}</p> <p>这是个函数:{{ func }}</p> </body> </html>
三、过滤器的使用
- 过滤器:对变量进行过滤,在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换原来的变量展示出来
- 语法:{{ 变量|过滤器名称:参数 }}
注意:使用参数的时候,冒号和参数之间不能有空格,一定要紧挨着
常用过滤器 | |
---|---|
add | 字符串相加,数字相加,列表相加,如果失败,将会返回一个空字符串 |
default | 提供一个默认值,只有在变量为None的时候才会使用默认值 |
first | 返回列表中的第一个值 |
last | 返回列表中的最后一个值 |
date | 格式化日期和时间 |
time | 格式化时间 |
join | 跟python中的join用法一样 |
length | 返回字符串或数组的长度 |
length_is | 字符串或者数组的长度是否为指定的值,返回True或False |
lower | 将所有的字符串都变成小写 |
capfirst | 首字母大写 |
slice | 切割列表,前闭后开 |
striptags | 去掉所有的html标签 |
safe | 关闭变量的自动转义 |
floatformat | 浮点数格式化 |
date和time过滤器格式 | |
---|---|
Y | 四位数的年 |
y | 两位数的年 |
m | 两位数的月 |
n | 一位数的月 |
d | 两位数的日 |
j | 一位数的日 |
g | 12小时制的一位数的小时 |
G | 24小时制的一位数的小时 |
h | 12小时制的两位数的小时 |
H | 24小时制的两位数的小时 |
i | 分钟,从00-59 |
s | 秒,从00-59 |
- 案例:
① 在views.py中:
from django.shortcuts import render
from datetime import datetime
def index(request):
num = 5
s = None
li = [1, 2, 3]
t = datetime.now()
word = 'hello'
html = '<h1>我是标题标签</h1>'
return render(request, 'student/index.html', context={'li': li,
'num': num,
's': s,
't': t,
'word': word,
'html': html})
② 在index.html中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index page</title>
</head>
<body>
<p>add过滤器:{{ num|add:3 }}</p>
<p>default过滤器:{{ s|default:'hahaha' }}</p>
<p>first过滤器:{{ li|first }}</p>
<p>last过滤器:{{ li|last }}</p>
<p>date过滤器:{{ t|date:'Y-m-d H:i:s' }}</p>
<p>time过滤器:{{ t|time:'H:i:s' }}</p>
<p>length过滤器:{{ li|length }}</p>
<p>length_is过滤器:{{ li|length_is:3 }}</p>
<p>capfirst过滤器:{{ word|capfirst }}</p>
<p>safe过滤器:{{ html|safe }}</p>
<p>striptags过滤器:{{ html|striptags }}</p>
</body>
</html>
③ 浏览器中访问效果
四、静态文件的引入
① 在项目目录下创建static的目录,再创建student app目录,然后再在其下创建js, css, images目录
② 在settings.py中添加如下:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
③ 引用案例,在首页中引用index.css使p标签字体变成红色
在index.html中,这里用到了模板标签,模板标签在下节中会讲到
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index page</title>
<link rel="stylesheet" href="{% static 'student/css/index.css' %}">
</head>
<body>
<p>你长得可真帅!!!</p>
</body>
④ 浏览器中访问效果图: