模板
- 概述
- 模板由两部分组成
- 作用
- 优点
- 模板的设计实现了业务逻辑与现实内容的分离
- 视图可以使用任何模板
- 模板处理加载渲染
定义模板
- 变量
- 语法
- 注意
- 如果使用的变量不存在,则插入的是空字符串
- 在模板中使用点语法
- 字典查询
- 属性或者方法
- 数字索引
- 在模板中调用对象的方法不能传递参数
- 标签
{% if 表达式 %}
语句
{% endif %}
{% if 表达式1 %}
语句1
{% else%}
语句2
{% endif %}
{% if 表达式1 %}
语句1
{% elif 表达式2 %}
语句2
……
{% elif 表达式n %}
语句n
{% else %}
语句e
{% endif %}
示例
{% if num %}
<h1>sunck is a nice man</h1>
{% endif %}
for
格式
{% for 变量 in 列表 %}
语句
{% endfor %}
{% for 变量 in 列表 %}
语句1
{% empty %}
语句2
{% endfor %}
注意
列表为空或者列表不存在时执行语句2
{{ forloop.counter }}
表示当前是第几次循环
示例
<ul>
{% for stu in studentss %}
<li>
{{forloop.counter}}--{{stu.sname}}--{{stu.sgrade}}
</li>
{% empty %}
<li>目前没有学生</li>
{% endfor %}
</ul>
注释
{# 注释 #}
注释多行
{% comment %}
注释
注释
{% endcomment %}
url
作用反向解析
格式{% url 'namespace:name' p1 p2 %}
反向解析
url(r'^', include('myApp.urls', namespace="app"))
url(r'^good/(\d+)/$', views.good, name="good"),
<a href="{% url 'app:good' 1 %}">链接</a>
csrf_token
作用用于跨站请求伪造保护
格式{% csrf_token %}
block、extends
作用用于模板的继承
autoescape
作用用于HTML转义
过滤器
语法{{ var|过滤器 }}
作用在变量被显示前修改它
lower
upper
<h1>{{str|upper}}</h1>
<h1>{{str|lower}}</h1>
过滤器可以传递参数,参数用引号引起来
join
格式
列表|join:‘#’
h1>{{list|join:'#'}}</h1>
如果一个变量没有被提供,或者值为false、空,可以使用默认值
default
格式
{{ var|default:'good'}}
示例
<h1>{{test|default:'没有'}}</h1>
根据给定格式转换日期为字符串
date
格式
{{ dateVal|date:'y-m-d'}}
加减乘除
<h1>num = {{num}}</h1>
<h1>{{num|add:10}}</h1>
<h1>{{num|add:-5}}</h1>
<!--num/1*5-->
<!--num * 5-->
<h1>{% widthratio num 1 5 %}</h1>
<!--num / 5-->
<h1>{% widthratio num 5 1 %}</h1>
模板继承
- 作用
- 模板继承可以减少页面的内容的重复定义,实现页面的重用
- block标签
- 在父模板中预留区域,子模板去填充
- 语法{% block 标签名 %} {%endblock 标签名%}
- extends标签
- 继承模板,需要写在模板文件的第一行
- 语法{% extends '父模板路径' %}
- 定义父模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#header{
width:100%;
height:100px;
background-color:red;
}
#footer{
width:100%;
height:100px;
background-color:blue;
}
</style>
</head>
<body>
<div id="header">header</div>
<div id="main">
{% block main%}
{% endblock main%}
<hr/>
{% block main2%}
{% endblock main2%}
</div>
<div id="footer">header</div>
</body>
</html>
{% extends 'myApp/base.html'%}
{% block main %}
<h1>获得id= main的css属性</h1>
{% endblock main %}
{% block main2 %}
<h1>获得id= main的css属性</h1>
{% endblock main2 %}
HTML转义
return render(request,'myApp/index.html',{"code":"<h1>sunck is a very good man</h1>"})
{{code}}
将接收到的code当成普通字符串渲染
将接收到的字符串当成HTML代码渲染
{{code|safe}}
{% autoescape off %}
{{code}}
{% endautoescape %}
CSRF
跨站请求伪造
某些恶意网站包含链接、表单、按钮、js,利用登陆用户在浏览器中认证,从而攻击服务
防止CSRF
在settings.py文件中的MIDDLEWARE增加'django.middleware.csrf.CsrfViewMiddleware',
{% csrf_token %}