使用模块包含3个基本步骤:配置模块引擎、编写模块和渲染模块
本文将介绍模块基础:
1、配置模块引擎
2、使用模块类
3、使用模块文件
1、配置模块引擎
模块引擎也称后端(BACKEND)。在项目配置文件setting.py的TEMPLATES变量中配置模块时,使用BACKEND选项配置模块引擎。
创建项目时,通常会在setting.py配置文件中添加模块的默认设置,示例代码如下:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Django的默认模板引擎为 django.template.backends.django.DjangoTemplates,其语法为Django模板语言(简称DTL),django.template.backends.jinja2.Jinja2是另一个Django内置的模板引擎。
模板配置的APP_DIRS默认为True,表示模板引擎将在项目的所有应用目录中搜索模板文件。也可在DIRS选项中搜索路径,示例代码如下:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['/html/templates','/html/django'],
},
]
Django会按照DIRS选项中的先后顺序搜索模板文件
OPTIONS选项中的context_processors选项用于注册在模板中使用的上下文处理器。
如果配置了多个模板引擎,则按先后顺序依次在各个模板引擎的搜索路径中寻找模板文件
2、使用模块类
django.template.Template 是Django提供的模板类,调用模板类的构造函数Template(),可以快速创建模板对象。调用模板对象的render()方法,可将模板渲染成HTML代码
构造函数Template()将模板字符串作为参数来创建模板对象。构造函数Context()用字典对象创建上下文对象,用于封装传递给模板的数据。模板对象的render()方法接受上下文对象参数,执行渲染操作,将数据填入模板,生成HTML代码。
3、使用模块文件
Template对象适用于处理比较简单的模板。相对复杂的模板则需要使用模板文件。模板文件是一个包含了模板语言代码的文本文件。Django对模板文件的扩展名没有要求,可以是.html, txt 等,也可以没有扩展名。
(1)定义模板文件
例如,下面的模板显示视图传递的时间。
使用模板
当前时间:{{ time }}
本文示例项目名称为chaper6。DIRS 为chaper6\templates ,所以模板文件放在chaper6\chaper6\templates 文件夹中。如果放在其他位置,则需要在DIR选项中进行设置,否则Django会找不到模板文件。
(2)、定义使用模板的视图
通常,模板文件不能直接使用,需要在视图中使用。
# chaper6/chaper6/views.py
from django.http import HttpResponse
from datetime import datetime
from django.template.loader import get_template
def getTime(request):
time=datetime.today() # 准备数据
t=get_template('mytemplate.html') # 载入模板文件
html=t.render({'time':time}) # 渲染模板
return HttpResponse(html) # 将模板渲染结果返回客户端
视图首先调用get_template() 方法来载入模板,再调用render()方法以渲染模板。
在使用Template对象来创模板时,需使用上下文对象作为render()方法的参数。使用模板文件时,则需使用字典对象作为render()方法的参数。
配置访问视图getTime的URL,
from django.urls import path
from chaper6 import views
urlpatterns = [
path('time',views.getTime),
]
启动项目的开发服务器后,在浏览器中访问“http://127.0.0.1:8000/time”,结果如图:
(3)使用TemplateResponse
TemplateResponse使用模板文件生成HttpResponse响应,TemplateResponse包含了载入模板和渲染模板操作,需要编写的代码更少
from datetime import datetime
from django.template.response import TemplateResponse
def getTime2(request):
time=datetime.today()
return TemplateResponse(request,'mytemplate.html',{'time':time})
视图getTime2在浏览器输出结果如图所示。视图getTime2与前面的getTime视图相比,只是使用模板的方式不同,结果一致
(4)适应快捷键shortcuts
django.shortcuts 模块中的快捷函数render()与TemplateResponse构造函数类似,使用模板文件和上下文字典来渲染模板,并返回封装响应结果的HttpResponse对象
from datetime import datetime
from django.shortcuts import render
def getTime3(request):
time=datetime.today()
return render(request,'mytemplate.html',{'time':time})
视图getTime3在浏览器输出结果如图所示。视图getTime3与前面的两个视图相比,结果一致