1. 模板标签
- 作用是什么?
标签在渲染的过程中提供任意的逻辑
class Index(View):
def get(self, request):
students = [
{'name':'张三', 'age':17, 'sex':'男'},
{'name':'李四', 'age':15, 'sex':'女'},
{'name':'王五', 'age':19, 'sex':'男'},
{'name':'赵六', 'age':14, 'sex':'女'},
{'name':'钱七', 'age':18, 'sex':'男'},
]
return render(request, 'index/home.html', context={
'students':students,
})
<div class="inner cover">
<h1 class="cover-heading">学生信息表</h1>
<table class="table">
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
{% for student in students %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ student.name }}</td>
<td>{{ student.age }}</td>
<td>{{ student.sex }}</td>
</tr>
{% endfor %}
</table>
</div>
-
常用标签
- if/elif/else: 可以使用and/or/in/not/==/!=/<=/>=,来进行判断
{% if students.name == "张三" %} 我的名字是张三 {% elif students.name == "李四" %} 我的名字是李四 {% else %} 我的名字是王五 {% endif %}
- for...in...:
- forloop.counter: 当前迭代的次数,下标从1开始. 1 2 3
- forloop.counter0: 当前迭代的次数,下标从0开始. 0 1 2
- forloop.revcounter: 当前迭代的次数,下标从大到小. 3 2 1
- forloop.revcounter0: 当前迭代的次数,下标从大到小. 2 1 0
- forloop.first: 返回bool类型,如果是第一次迭代,返回True,否则返回False
- forloop.last: 返回bool类型,如果是最后一次迭代,返回True,否则返回False
- forloop.parentloop: 如果发生多层循环嵌套,那么这个变量返回的是上一层的for
{% for student in students %} <tr> <td><a href="{% url 'index:home' %}">{{ forloop.counter }}</a></td> <td>{{ student.name }}</td> <td>{{ student.age }}</td> <td>{{ student.sex }}</td> </tr> {% endfor %}
- for...in...empty...:如果没有数据,跳转到empty中
{% for student in students %} xxx {% empty %} yyy {% endfor %}
- load: 加载第三方标签 {% load static %}
- url:返回一个命名了的url的绝对路径
- <a href="{% url 'app_name:name' 参数 %}"> (若有参数,则需空格隔开)
<a href="{% url 'index:home' stu.id %}">
- with:缓存一个变量,相当于重命名
{% with students.0.name as stu %} {{ stu }} {% endwith %}
-
autoescape:开启和关闭自动转义
- if/elif/else: 可以使用and/or/in/not/==/!=/<=/>=,来进行判断
-
语法
- {% tag %} {% endtag %}
- {% tag 参数 参数 %}
2.模板的继承与引用
Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks
- 引用 include标签
- 继承 extends标签
模板继承使用extends标签实现。通过使用block来给子模板开放接口。
1、extends必须是模板中的第一个出现的标签。
2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
3、如果出现重复代码,就应该考虑使用模板。
4、尽可能多的定义block,方便子模板实现更细的需求。
5、如果在某个block中,要使用父模板的内容,使用block.super获取