定义模板
变量
视图传递给模板的数据
要遵守标识符规则
语法:{{var}}
注意:若变量不存在,则插入的是空字符串
在模板中使用点语法
字典查询
属性或者方法
数字索引
在模板中调用对象的方法
注意:在模板里定义的函数不能传递self以外的参数
标签
语法:{% tag %}
作用:在输出中创建文本
控制逻辑和循环
if标签
格式
{% if 表达式 %}
语句
{% endif %}
if-else 格式
{% if 表达式 %}
语句1
{% else %}
语句else
{% endif %}
if-elif-else 格式
{% if 表达式1 %}
语句1
{% elif 表达式2 %}
语句2
...
{% else %}
语句else
{% endif %}
实例{% if num %}
<h1>sunck nice</h1>
{% endif %}
for标签
格式1
{% for 变量 in 列表 %}
语句
{% endfor %}
格式2
{% for 变量 in 列表 %}
语句1
{% empty %} # 注意:列表为空或者列表不存在时执行语句2
语句2
{% endfor %}
格式3
{{ forloop.counter }} #表示当前是第几次循环
实例<h1>学生列表</h1>
<ul>
{% for stu in students %}
<li>
{{forloop.counter}}--{{stu.sname}}--{{stu.sgrade}}
</li>
</ul>
comment标签
作用:相当于多行注释,被注释的内容不再执行
格式 {% comment %}
多行注释
{% endcomment %}
ifequal/ifnotequa标签
作用 判断是否相等或者不相等
格式{% ifequal 值1 值2 %}
语句1
{% endifequal %} # 如果值1等于值2,执行语句1,否则不执行语句1
实例{% ifequal 'sunck' 'sunck' %}
<h1>sunck handsome</h1>
{% endifequal %}
include标签
作用:加载模板并以标签内的参数渲染
格式:{% include '模板目录' 参数1 参数2 %}
url标签
作用:反射解析(具体见下文“反向解析”)
格式:{% url 'namespace: name' p1 p2 %}
csrf_token标签
作用:用于跨站请求伪造保护
格式:{% csrf_token %}
block, extends标签
作用:用于模板的继承
autoescape标签
作用:用于HTML转义
过滤器
语法 {{ var|过滤器 }}
作用:在变量被显示前修改它,只是加一个效果,对变量不会造成影响
lower:全小写
upper:全大写
实例:<h1>{{str|upper}}</h1> <!--过滤器(变成大全写)-->
过滤器可以传递参数,参数用引号引起来
join
格式:列表|join:"#"
实例:<h1>{{list|join:'#'}}</h1>返回good#nice#handsome
如果一个变量没有被提供,或者值为false,空,可以使用默认值
default
格式: {{var|default:"没有"}}
实例:<h1>{{text|default:"没有"}}</h1> 返回“没有”
根据给定格式转换日期为字符串
date
格式: {{dateVal|date:'y-m-d'}}
HTML转义
escape
加减乘除
实例<h1>num = {{num|add:10}}</h1> <!--加-->
<h1>num = {{num|add:-10}}</h1> <!--减-->
<h1>num = {% numwidthratio num 1 5%}</h1><!--num/1*5--> <!--乘-->
<h1>num = {% num widthratio num 5 1%}</h1> <!--除-->
注释
单行注释 语法{#注释内容 #}
多行注释 语法{% comment %}
注释内容
{% endcomment %}
反向解析
当修改project/urls.py的正则,其他匹配的正则也要随之改变,当正则表达式很多的时候,这样就会很麻烦甚至会报错
实例:../project/urls.py
url(r"^", include('myApp.urls',namespace="app"))
../myApp/urls.py
url(r"^$",views.index),
url(r'^good/(\d+)/$',views.good,name="good"),
../myApp/views.py
def index(request):
student = Students.objects.get(pk=1)
return render(request, 'myApp/index.html', {"stu": student,"num": 10,"str":"sunck good","list":["good","nice","handsome"]})
def good(request,id):
return render(request,'myApp/good.html',{"num":id})
../templates/good.html
<h1>good</h1>
../templates/index.html
<a href="{% url 'app:good' 1 %}">链接</a>
模板继承
作用:模板继承可以减少页面的重复定义,实现页面的重用
block标签:在父模板中预留区域 ,子模板去填充
语法:{% block 标签名 %}
{% endblock 标签名 %}
extends标签:继承模板,需要写在模板文件的第一行
语法 : {% extends '父模版路径myApp/base.html' %}
{% block main %}
内容
{% endblock 标签名 %}
实例:templates/myApp/base.html(父模板)
<!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">footer</div>
</body>
</html>