Django 中的模板
模板的功能
模板用于产生 html,控制页面上展示的内容,模板文件不仅仅是一个 html 文件,它包含两部分内容
- 静态内容:像 css、js、html
- 动态内容:用于动态生成一些网页内容,通过模板语言来生成
模板文件的使用
通常是视图函数中使用模板产生 html 内容返回给客户端
- 加载模板文件,获取模板文件的内容,产生一个模板对象
- 定义模板上下文,给模板传递数据
- 模板渲染产生 html 页面内容,用传递的数据替换相应的变量,产生一个替换后的标准 html 内容
def index(request):
temp = loader.get_template('login/index.html')
context = {}
res_html = temp.render(context)
return HttpResponse(res_html)
模板文件的加载顺序
- 首先去配置的模板目录下面去找模板文件
- 去 INSTALLED_APPS 下面的每个应用下找模板文件,前提是应用中必须有 templates 文件夹
模板语言
模板语言简称为 DTL(Django Template Language)
模板变量
模板变量是由数字、字母、下划线、点组成的,不能以双下划线开头
使用模板变量
模板变量通过{{ 模板变量名 }}
这种方式使用
模板变量的解析顺序
以{{ user.uname }}
为例
- 首先把 user 当成一个字典,把 uname 当成键名,即对
user['uname']
进行取值 - 把 user 当成一个对象,把 uname 当成属性,即对
user.uname
进行取值 - 把 user 当成一个对象,把 uname 当成对象的方法,即对
user.uname()
进行取值
再以{{ user.0 }}
为例
- 首先把 user 当成一个字典,把 0 当成键名,即对
user['0']
进行取值 - 把 user 当成一个列表,把 0 当成下标,即对
user[0]
进行取值
如果解析失败,则产生内容时用空字符串填充模板变量
使用模板变量时,.
前面的可能是一个字典,可能是一个对象,还可能是一个列表
def temp_var(request):
my_dict = {'title' : 'dict_title'}
my_list = ['1', '2', '3']
user = UserLogin.objects.get(id=1)
return render(request, 'login/temp.html', {'dict' : my_dict, 'list' : my_list, 'user' : user})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板变量</title>
</head>
<body>
使用字典属性:{{ dict.title }}<br>
使用列表元素:{{ list.1 }}<br>
使用对象属性:{{ user.uname }}
</body>
</html>
模板标签
通过{% 代码段 %}
的方式使用模板标签
for
{% for x in list %}
# 列表不为空时执行
{% empty %}
# 列表为空时执行
{% endfor %}
可以通过{{ forloop.counter }}
得到 for 循环当前遍历的次数
if
{% if 条件 %}
{% elif 条件 %}
{% else %}
{% endif %}
# 关系比较操作符:> < >= <= == !=
# 逻辑运算符:not and or
注意,进行比较操作的时候,比较操作符的两边必须要有空格
模板标签还有很多,可以在官网上查找
过滤器
模板过滤器的作用就是对模板变量进行操作的
- date:改变日期的显示格式
- length:求长度,字符串、列表、元组、字典长度均可
- default:设置模板变量的默认值
格式:模板变量|过滤器:参数
,例如:
{{ user.re_time|date:'Y年-m月-d日' }}
同样,过滤器也还有很多,可以去官网上查询
模板注释
单行注释
{# 注释内容 #}
多行注释
{% comment %}
注释内容
{% endcomment %}
值得一提的是,html 中注释的内容,在浏览器的查看源代码功能中是可以看到的,而这种使用模板注释,是看不到的