模板引擎是模板响应的后端。这里边我们知道模板指的是HTML、javascript、CSS等相关的文件。那么模板引擎就是将这样的表示层文件与数据相整合的过程。
那么整合之后,我们引擎会把加工后的数据给到响应类型,用之前的文件型,或者是一次性响应类型等相关的类型,将模板加工后的数据反馈给用户。
django支持两种模板引擎,一种是django模板引擎,一种是jinja2模板引擎。其中第二种是第三方的模板引擎。
我们建议大家使用django。
模板引擎在setting.py文件中有相关的变量进行设置,我们可以在这个文件中找到TEMPLATES这样一个变量。
看到第一个信息是BACKEND,这个BACKEND就是指模板引擎后端的配置变量。模板目录也可以通过template变量中的DIRS变量的设定来给出。
在之前的实例中,我们需要将我们增加的模板文件,以及它放过放置的目录,写到这样的一个目录的列表中。
那么当我们的代码在一个目录模板中去寻找模板的时候,他也是按照列表的先后顺序进行查找。
在使用模板时,我们一种方式是直接使用模板的名称。另外我们也可以通过一些函数在模板目录中去查找我们使用的模板,模板查找django提供了一个函数叫get_template,它只有一个变量,就是需要查找模板的名称。
它能够在setting.py文件设定的模板目录列表中,依次查找某个具体的使用的模板名字,直到找到这个模板,并且以Template类来反馈这个模板。
如果在模板目录中没有找到我们需要使用的模板文件,将会抛出TemplateDoesNotExist异常。
django同时提供了另外一个函数叫select_template,它与get_template类非常相似。
它也能够依次按照模板列表去查找相关的模板,所不同的是它的参数不是一个具体的模板名称,而是一个模板列表,它同时可以查找多个模板,但是最后只会返回第一个它查找的模板,返回的类型也是template类。
这里边大家可以想象,在django框架中,用户编程所需要使用的每一个模板文件被表达为template类型,表达之后,这个类型需要进行一定的数据加工,将它渲染为可以响应给用户的,既有模板表现,又有数据内涵的这样的字符串,那么这个过程就叫渲染。
template类使用render方法进行渲染,渲染之后生成HTML相关的字符串。
render的方法就是将模板和内容相结合进行渲染的方法。
它天然有两个参数,第一个参数就是在当前模板下需要加载的数据信息,数据信息用字典的类型来表示。
另外要给出相关的HTTP请求,渲染函数将模板和内容整合到一起,并返回HTML字符串。是模板类型使用中非常重要的一个过程。对于用户的url访问,如果有一个静态的字符串或者静态的模板文件可以直接响应它,我们并不需要渲染过程。
但是如果需要在表现的HTML文件中去增加相关数据的时候,就需要进行渲染。
下面我们看一段小的代码:
我们可以使用get_template函数,去获取一个我们希望使用的模板,并且表达为一个类,这个类的变量名叫tpl。
进一步我们可以使用类的render方法,在其中增加一个数据,将其中的data变量替换为datalist。
那么经过render之后,就会生成一个HTML的字符串,我们可以使用HttpResponse将这个字符串反馈给用户。
所以渲染的过程,事实上是将template和context进行加工,并且生成HTML的过程。
模板使用步骤也非常简单。第一我们首先指定一个template,并且通过查找它template,定义一个他们类。
第二步进行渲染,将context类或者将字典表达的数据与模板进行整合。
说了这么多不是很形象,让我们来编个小程序,来增加一个playground的路径,来试试我们的模板和渲染的使用。
一、在全局路由中增加对playground的路径的索引
path('playground/',msgviews.pgproc)
二、找到views.py文件,我们增加这个函数。
from django.template import Template,Context
def pgproc(request):
template = Template("<h1>这个程序的名字是{{name}}</h1>")
context = Context({"name":"实验平台"})
return HttpResponse(template.render(context))
首先生成一个模板类,在这样一个模板中,其中有一个name,它是一个变量,我们需要对这个内容进行赋值。
下面我们可以生成一个context类,来表达具体的值的信息。
下一步我们通过渲染来反馈对url的响应。
我们执行一下。我们可以看到在页面上,我们的模板中,它的变量替换成了我们给定的数据。