一.简述
在如今的web实际开发中,为了更加规范的编码及方便后期的项目规划,咱们要求先后端分离,前端更进一步要求布局(HTML)、样式(CSS)、行为(JS)分离。在django中,咱们把template分离出来做为一个独立的模块来处理HTML。本章节主要讲解django中的template模块的使用。
二.模板语法
模板组成:HTML+逻辑代码
三.模板之逻辑代码
1.模板渲染的原理
两个概念:
template:模板
context:上下文
渲染原理(过程):
A.Django先经过Template生成一个实例化template对象;
B.Diango再经过Context生成一个实例化context对象;
C.Djangi经过template实例调用渲染方法(例如:render())来渲染生成结果;
如图:
代码块以下:html
from django.template import Template,Context
template = Template("welcome to {{name}}.")
context = Context({'name':'浙江'})
template.render(context)
'welcome to 浙江.'前端
注:以上的过程是在django内部实现的,比较复杂,因此咱们直接使用django封装好的方法实现该效果便可,即render(request,’template对象文件’,data)或render(request,’template对象文件’,local())
同一个模板对象能够重复使用。
2.模板之变量
2.1格式:{{varname}}
在HTML中使用双引号包裹变量名,再经过view中将变量对应的值传过来(传值有两种方式:1.{key:value};2.locals())。
实例代码以下:
2.2变量的类型及变量深度查询
变量能够是字符串、字典、列表、元组、对象等等。
如图:web
页面效果图:
注:在template中使用的均是深度查询,即只能经过符号.(点)进行下一级查询且全部的序列数据类型均能使用索引正常查询但不能使用方括号的格式,只能使用var.index的格式,不能使用var[index]或dic[key]的格式。
2.3
3.模板之过滤器
注:该部分图片来自网络(若有侵权,联系删除)django
4.重点:自定义过滤器filter
上面给去了一些经常使用的过滤器,也是django给咱们提供好的方法,可是若是须要某些特定功能的函数呢?而django只是提供了公用的方法,此时咱们可使用django的filter的自定义方法。
1.首先须要使用的app中建立templatetags模块(必需要有且为Package文件类型)
2.在templatetags模块中新建任意.py文件,如:mytags.py
3.在py文件中自定义相应的filter函数代码,以下所示:后端
from django import template from django.utils.safestring import mark_safe register = template.Library() #register的名字是固定的,不可改变 #自定义一个multi函数 @register.filter def multi(x,y): #自定义过滤器函数 return x*y #自定义一个multi函数 @register.simple_tag def tag_multi(x,y,z): #自定义标签函数 return x*y*z
4.在要使用自定义的filter函数的HTML文件中导入以前建立的mytags.py文件,即:{% load mytags %}浏览器
{% load mytags %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>myfilter</title> </head> <body> <p>{{ person.name }}的年龄为:{{ person.age}}</p> <p>{{ person.name }}的年龄*10为:{{ person.age|multi:10 }}</p> </body> </html>
5.在该HTML文件中使用自定义filter函数,以下:网络
{% load mytags %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>myfilter</title> </head> <body> <p>{{ person.name }}的年龄为:{{ person.age}}</p> <p>{{ person.name }}的年龄*10为:{{ person.age|multi:10 }}</p> {# 使用自定义的filter函数 #} </body> </html>
6.注意:a要在setting中的INSTALLED_APPS配置当前的app,以下图,否则django会没法找到自定义的mytags.py文件。b.新建mytags.py文件后重启该项目;c.filter函数只能接收2个参数(大括号|前面一个为此处的第一个参数)。app
7.最终在浏览器上显示效果如图所示:前后端分离
8.总结图:ide
欢迎关注笔者我的公众号: