1.模板后端的默认配置
Django在创建项目的时候,默认定义的TEMPLATES如下:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
DIRS:
一个目录列表,指定模板文件的存放路径。模板引擎将按照列表中定义的顺序查找模板文件
APP_DIRS:
一个布尔值,为True时,模板引擎会在已安装应用的templates子目录中查找模板
2.在视图中使用模板
新建模板文件:
app中新建templates文件夹:
新建index.html文件:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>IMUSTCTF</title> </head> <body> <h1>你好啊</h1> {{ name }} </body> </html>
视图中使用模板:
def model_test(request): return render(request, 'index.html', {'name': 'dahezhiquan'})
访问视图路径,显示如下:
3.Django模板标签
模板标签,用于后端向前端传递数据
变量
语法:
view:{"HTML变量名" : "views变量名"} HTML:{{变量名}}
def text(request): views_name = "模板变量测试" return render(request,"text.html", {"name":views_name}) ----------------------------------------------------------- html文件: <p>{{ name }}</p> 会回显views_name的值
列表
可以用 . 索引下标取出对应的元素
from django.shortcuts import render def text(request): views_list = ["a","b","c"] return render(request, "text.html", {"views_list": views_list}) ----------------------------------------------------------------------- html文件: <p>{{ views_list }}</p> # 取出整个列表 <p>{{ views_list.0 }}</p> # 取出列表的第一个元素a
字典
可以用 .键 取出对应的值
from django.shortcuts import render def text(request): views_dict = {"name":"imustctf"} return render(request, "text.html", {"views_dict": views_dict}) ---------------------------------------------------------------------- html文件: <p>{{ views_dict }}</p> #取出整个字典 <p>{{ views_dict.name }}</p> #取出name键对应的值
过滤器
模板语法:
{{ 变量名 | 过滤器:可选参数 }}
模板过滤器可以在变量被显示前修改它
常用过滤器:
{{ name|lower }} #文档大写转换文本为小写 {{ bio|truncatewords:"30" }} #将显示变量 bio 的前30个词 {{ name|default:"666" }} #default 为变量提供一个默认值 {{ name|length }} #返回对象的长度,适用于字符串和列表 #字典返回的是键值对的数量,集合返回的是去重后的长度 {{ num|filesizeformat }} #以更易读的方式显示文件的大小(即'13 KB', '4.1 MB', '102 bytes'等) #字典返回的是键值对的数量,集合返回的是去重后的长度 {{ time|date:"Y-m-d" }} #根据给定格式对一个日期变量进行格式化 {{ views_str|truncatechars:2 }} #如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分 #截断的字符串将以 ... 结尾,中文占两个字符长度 {{ views_str|safe }} #将字符串标记为安全,不需要转义 #Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效 #加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效 #例如: from django.shortcuts import render def text(request): views_str = "<a href='https://www.baidu.com/'>点击跳转</a>" return render(request, "text.html", {"views_str": views_str}) 模板中会自动生成views_str的html语句,且可以正常执行
if/else标签
例如:
{%if num > 90 and num <= 100 %} 优秀 {% elif num > 60 and num <= 90 %} 合格 {% else %} 不合格 {% endif %}
for标签
例如:
#遍历列表 {% for i in views_list %} {{ i }} {% endfor %} #遍历字典 {% for i,j in views_dict.items %} {{ i }}---{{ j }} {% endfor %}
在 {% for %} 标签里可以通过 {{forloop}} 变量获取循环序号
forloop.counter: 顺序获取循环序号,从 1 开始计算
forloop.counter0: 顺序获取循环序号,从 0 开始计算
forloop.revcounter: 倒序获取循环序号,结尾序号为 1
forloop.revcounter0: 倒序获取循环序号,结尾序号为 0
forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False
{% for i in listvar %} {{ forloop.counter }} {{ forloop.counter0 }} {{ forloop.revcounter }} {{ forloop.revcounter0 }} {{ forloop.first }} {{ forloop.last }} {% endfor %}
可选的 {% empty %} 从句:在循环为空的时候执行
{% for i in listvar %} {{ forloop.counter0 }} {% empty %} 空空如也~ {% endfor %}
可以嵌套使用 {% for %} 标签:
{% for athlete in athlete_list %} <h1>{{ athlete.name }}</h1> <ul> {% for sport in athlete.sports_played %} <li>{{ sport }}</li> {% endfor %} </ul> {% endfor %}
include标签
{% include %}
标签允许在模板中包含其它的模板的内容
{% include "index.html" %}
4.csrf_token
csrf_token 用于form表单中,作用是跨站请求伪造保护。
如果不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。
用了{% csrf_token %}标签,在 form 表单提交数据时,才会成功。