一.模版标签
当我们要用Python语句去调用模版变量时就要用到模版标签
当我们在视图函数里面定义一个字典,在模版文件里面用普通的方法引用时会用如下方法
#teacher/view.py
def index(requese):
students = [
{'name':'张三','sex':'男','age':'33'},
{'name':'李四','sex':'男','age':'22'},
{'name':'王五','sex':'男','age':'25'},
]
return render(request,'teacher/index.html',context='{'student':students}')
#templater/teacher/index.html
姓名 性别 年龄
{{students.0.name}}
{{students.0.sex}}
{{students.0.age}}
{{students.1.name}}
{{students.1.sex}}
{{students.1.age}}
{{students.2.name}}
{{students.2.sex}}
{{students.2.age}}
这样的引用属于硬编码,非常不实用,所以要用到模版标签,可以将上面的代码作如下修改
#templater/teacher/index.html
姓名 性别 年龄
{% for student in students%}
{{student.name}}
{{student.sex}}
{{student.age}}
{% endif %}
上面和下面的index.html结果是一样的
常用标签
(1)if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal
(2)for…in…:跟python中的for…in…是一样的用法。
forloop.counter:当前迭代的次数,下标从1开始。
forloop.counter0:当前迭代的次数,下标从0开始。
forloop.revcounter:跟forloop.counter一样,下标从大到小。
forloop.revcounter0:跟forloop.counter0一样,下标从大到小。
forloop.first:返回bool类型,如果是第一次迭代,返回true,否则返回false。
forloop.last:返回bool类型,如果是最后一次迭代,返回True,否则返回False。
forloop.parentloop:如果发生多层for循环嵌套,那么这个变量返回的是上一层的for
(3)for…in…empty…:如果没有数据,跳转到empty中。
(4)load:加载第三方标签。最常用的是{%load static%}
(5)url:返回一个命名了的URL的绝对路径。
(6)with:缓存一个变量。
(7)autoescape:开启和关闭自动转义。
URL反向解析
通常当我们点开一个详情页面的时候,会跳转到另一个URL,这时候会用到模板标签里面的URL反向解析
使用方法:
- 先定义好视图函数
def student_detail_view(request,pk):
students = {
1:{'name':'李萌','sex':'302','age':'16','hobby':['看书','看电影','骑车']},
2:{'name':'张杨','sex':'301','age':'80','hobby':['看书','看电影','骑车']},
3:{'name':'鸣人','sex':'301','age':'18','hobby':['看书','看电影','骑车']}
}
if pk in students:
student = students[pk]
else:
student = "没有此人"
return render(request,'teacher/student_detail.html',context={'student':student})
- 简单编辑一个详情页模板
学生详情页
学生详情:{{ student }}
- 定义好 URL 路由
from django.urls import path,re_path
from . import views
app_name = 'teacher'
urlpatterns = [
path('students/',views.students_view),
path('studentDetail/',views.student_detail_view,name='studentDetail')
]
- 在模板文件中加入a标签,用URL模板标签定义a标签的路由
{% for student in students %}
{{student.id}}
{{student.name}}
{{student.sex|convert_male}}
{{student.age}}
{% show_list student.hobby %}
二.模板的继承与引用
1.模板继承
每个不同的页面基本上都有相同的公共的部分,我们可以把这些公共的部分单独拿出来当作基本模板(base),然后在不同的模板中继承这个基本模板
a. 先创建一个base模板
{% block title %}这是首页{% endblock %}
{% block content %}
{% endblock %}
上面用到了 block
标签, {% block name %} 与 {% endblock %} 之间就是继承基本模板的页面可以根据不同情况改写的内容块
b.继承基本模板
{% extends 'teacher/base.html' %}
只要在模板头部添加一个extends
标签,就能继承base.html所有的公共部分,然后在 {% block name %} 与 {% endblock %}中添加自己想要的内容
2.模板引用
当我们需要在一个模板中引入另外一个模板时,比如插入一段广告,我们就会用到模板的引用
模板的引入比较简单,只需要用到include
模板标签
{% block ad %}
{% include 'teacher/ad.html' %}
{% endblock %}
include
和block
灵活使用就能做到灵活的插入广告