DTL-django模板语言
一.模板
1.1 概述
Django中的模板是指可以动态生成任何基于文本格式文件的技术(如HTML、XML、CSV、JS、CSS等)。
MVC
Model模型,主要用于数据的读写操作
Controller控制器,主要用于接收用户的请求并且返回响应到客户端
View视图,主要用于显示的HTML页面及相关技术(如CSS 、JavaScript)
MVT
Model模型,主要用于数据的读写操作
View视图,主要用于接收用户的请求并且返回响应到客户端
Template模板,主要用于显示的HTML页面及相关技术(如CSS 、JavaScript)
Django内置了自己的模板系统,称为Django模板语言(DTL,Django Template Language)。
由于历史原因,模板引擎的通用支持和Django模板语言的实现都在django.template的命名空间中。
在Django 3.2中,支持两种模板引擎:默认的Django模板引擎和第三方的Jinja2模板引擎。
1.2 配置
settings.py中关于模板的配置如下:
TEMPLATES = [
{
# 使用的模板后端
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 模板引擎应该查找模板源文件的目录,将按照顺序依次搜索(原则:查到即停止)
'DIRS': [BASE_DIR / 'templates'],
# 模板引擎是否应该在已安装的应用程序的模板目录中查找模板源文件
'APP_DIRS': True,
# 模板引擎的选项
'OPTIONS': {
# ... some options here ...
},
},
]
在djangoTemplates项目的根目录下创建名称为templates的目录,以便存储模板文件:
$ cd djangoTemplates
$ mkdir djangoTemplates/templates
此时的目录结构如下:
djangoTemplates/
├── djangoTemplates
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── manage.py
└── templates
二.便捷函数
在 django.shortcuts 包收集助手函数,可以协助程序员快速完成某些工作。
2.1 render()函数
render()函数用于将给定的模板与给定的上下文字典组合在一起,并以渲染的文本返回 HttpResponse 对象。
其语法结构是:
from django.shortcuts import render
render(request, template_name, context=None, content_type=None, status=None, using=None)
其中:
● request参数指用于生成此响应的请求对象
● template_name参数用于指定要使用的模板的名称
● context参数用于指定要添加到模板上下文的值所组成的字典
● context_type参数用来指定模板文件的 MIME 类型,默认 ‘text/html’
● status参数用来指定HTTP响应的状态码,默认为 200
● using 参数用于指定加载模板的模板引擎的 NAME
示例代码如下:
from django.shortcuts import render
def index(request):
return render(request,'index.html')
2.2 render()函数与 HttpResponse对象
render() 函数和 HttpResponse 对象在 Django 中都用于处理 HTTP响应,但它们的作用不同:
● render() 函数通常用于将模板和上下文数据组合成一个 HttpResponse 对象来返回给客户端
● HttpResponse 对象则是直接返回一个 HTTP 响应,通常用于返回纯文本或者其他非 HTML 格式的数据
三.DTL
3.1 概述
Django 模板语言的语法涉及四个部分:
● 注释 – 注释,其可以分为单行注释和多行注释
● 变量 – 变量将在模板被执行时被替换为实际值
● 标签 – 标签用于控制模板的逻辑,如分支结构、循环结构等
● 过滤器 – 过滤器用于转换变量和标签参数的值,如将变量值转换为大写字母、截取字符串等
3.2 注释
在Django DTL中单行注释的语法结构是:
{
# 注释内容 #}
需要注意的是:单行注释内容之间不能换行
在Django DTL中的多行注释要通过内置标签comment实现,其语法结构是: