1.模板标签
定义:标签在渲染过程中提供任意的逻辑。
这个定义是刻意模糊的,例如,一个标签可以输出内容,作为控制结构,例如"if" 语句或"for"循环从数据库中提取内容,甚至可以访问其他的模板标签。
标签语法:由%}和{%来定义的,例如:{%tag%} {%endtag%}
1.if-else
{% if name == 'xiaoming' and age == 12 %}
我是{{ name }}
{% elif name == "xiaozhang" %}
我是{{ name }}
{% else %}
我是马志量
{% endif %}
2.ifequal
{% ifequal name 'xiaoming'%}
我是{{ name }}
{% endifequal %}
3.for
{% for foo in list %}
<li>{{ foo}}</li>
{% endfor %}
4.forloop
forloop.counter 当前迭代的次数,下标从1开始,1,2,3
forloop.counter0 当前迭代的次数,下标冲0开始,0,1,2
forloop.revcounter 跟forloop.counter 一样,下标从大到小。3,2,1,先把列表值反序,在取值。
forloop.revcounter0 跟forloop.counter0 一样,下标从大到小。2,1,0,先把列表值反序,在取值。
forloop.first 返回bool类型,如果是第一次迭代,返回True,否则返回False
forloop.last 返回bool类型,如果是最后一次迭代,返回True,否则返回False
forloop.parentloop 如果发生多层for循环嵌套,那么这个变量返回的是上一层的for
5.for in empty
如果没有数据,跳转到empty中
{% for foo in aa %}
{{ foo }}
{% empty %}
aaa
{% endfor %}
6.url
<a href="/book/index">跳转一</a><br>
<a href="{% url 'test_index' %}">跳转二</a>
path('index/',views.index,name='test_index'),
跳转一种 ,index是自定义的路由路径。
跳转二中,test_index是定义的name属性值。
7.with
缓存一个变量
{% with name as aaa %}
{{ aaa}}
{%endwith%}
8.autoescape
开启和关闭自动转义
{% autoescape off %}
{{ tag }}
{{ tag }}
{{ tag }}
{{ tag }}
{% endautoescape %}
2.模板的继承与引用
Django模板引擎中最大也是最复杂的部分就是模板继承了。模板继承可以让你创建一个基本的“骨架”模板,它包含您站点中的全部元素,并且可以定义能够被子模板覆盖的block。
2.1模板继承
例
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}这是要继承的模板{% endblock %}</title>
</head>
<body>
头部------------------<br><br><br><br>
{% block center%}中间------------------{% endblock %}<br><br><br><br>
尾部------------------<br><br><br><br>
</body>
</html>
test1.html去继承base.html
{% extends 'book/base.html' %}
{% block center %}
test1自己的内容
{% endblock %}
{% block title %}
test1
{% endblock %}
模板继承总结:
模板继承使用extends标签实现。通过使用block来给子模板开放接口。
1.extends必须是模板中的第一个出现的标签,
2.子模板中的所有内容,必须出现在父模板定义好的blokc中,否则django将不会渲染。
3.如果出现重复代码,就应该考虑模板。
4.尽可能多的定义block,方便子模板实现更细的需求。
5.如果在某个block中,要使用父模板的内容,使用block.super获取。
{{ block.super }}
也可以去改父模板中的样式
例
base.html
p标签中的字体在base.html中是红色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}这是要继承的模板{% endblock %}</title>
<style>
{% block p %}
p{
color: red;
}
{% endblock %}
</style>
</head>
<body>
<p>能改样式吗?</p>
头部------------------<br><br><br><br>
{% block center%}中间------------------{% endblock %}<br><br><br><br>
尾部------------------<br><br><br><br>
</body>
</html>
test1.html继承时,改下字体颜色。
{% block p %}
p{
color:aqua;
}
{% endblock %}
2.2模板引用
使用include引用
test2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test2</title>
</head>
<body>
我是xiaoming
</body>
</html>
test1.html
{% extends 'book/base.html' %}
{% block center %}
{{ block.super }}
test1自己的内容<br>
这是引用的test2.html<br>
{% include 'book/test2.html' %}
{% endblock %}
{% block title %}
test1
{% endblock %}
{% block p %}
p{
color:aqua;
}
{% endblock %}