模板是django框架的重要组成部分,而变量是如何渲染在模板中是框架使用的基础。
目录
模板概述
模板包含静态的HTML和用于描述如何动态生成HTML的特殊语法两个部分。
一个Django工程可以配置一个或者多个模板引擎。
Django自带的模板系统叫作Django Template Language(DTL),通过引擎可以方便地加载模板文件并在内存中进行编译,然后插入动态数据,最后返回一个字符串。
模板的结构和HTML文件非常相似,甚至完全可以使用一个HTML文件作为模板。
定义模板
变量:视图传递给模板的数据;要遵守标识符规则
语法:{{val}}
注意:如果使用的变量不存在,则插入为空字符串
渲染变量
通过设置路由和视图展示模板来演示。
路由
path('template1', views.template1, name='template1'),
视图
定义一个视图方法,渲染到模板中,并传递一个变量给模板。
def template1(request):
return render(request, 'test/index.html', {'title': '这是模板变量'})
模板
简单的在模板中渲染一下视图传递的title变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板</title>
</head>
<body>
<h2>{{title}}</h2>
</body>
</html>
渲染对象属性
有时候业务中需要把一些复杂的变量进行渲染,比如对象或者列表类型的。
可以使用以下方式进行传递和渲染。
路由
path('template2', views.template2),
视图
视图传递给模板设定好的数据
def template2(request):
grades = Grades.objects.get(pk=1)
testlist = ['This', 'is', 'an', 'example', 'template']
return render(request, 'test/index.html', {
'title': 'This is an example template',
'info': grades,
'testlist': testlist,
})
模板
在模板中使用点语法来进行调用和渲染。当做字典查询、属性或者方法、数字索引使用。
<h2>{{title}}</h2>
<ul>
<li>{{info.name}}</li>
<li>{{info.boy_num}}</li>
<li>{{testlist.0}}</li>
<li>{{testlist.1}}</li>
</ul>
渲染对象方法
有时候需要在模板中调用对象的方法来渲染。
模型
定义模型方法获取班级名称
class Grades(models.Model):
""" 班级表模型 """
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20)
boy_num = models.IntegerField()
girl_num = models.IntegerField()
create_time = models.DateTimeField()
def get_name(self):
return self.name
模板
模板中调用模型对象方法,还是使用点语法。
<h2>{{title}}</h2>
<ul>
<li>{{info.name}}</li>
<li>{{info.boy_num}}</li>
<li>{{info.get_name}}</li>
</ul>
注意:在模板中无法传递参数。
总结
视图处理数据传递给模板,模板解析变量使用两个花括号和字段名称,直接解析或者使用点语法。