在项目迭代流程中,前端页面都会进行大量的修改,如果将页面放到视图函数中,那么当对前端页面修改的时候,也会使得视图函数发生变化,大大加重了后端的负担。从 MTV 设计模式的角度出发,视图层是实现业务逻辑的,在视图层编写代码和编写 HTML 页面是两项可以相互独立的工作。
所以,这里需要了解Django的模板系统,它的存在使得 HTML 和 View 视图层实现了解耦

在 Django 中我们把 “模板” 称之为 Template,是设计模式中的 T 层,模板用于编写html代码,还可以嵌入模板代码转换更方便的完成页面开发,再通过在视图中渲染模板,将生成模板的设计实现了业务逻辑视图与显示内容模板的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。
其实 T 层应用是这样实现的,当创建好一个 Django 项目后,在项目的同级目录下(或在应用目录下)创建一个名为 templates 文件夹,对它进行简单的配置后,这个文件夹将被 Django 自动识别。
执行命令python manage.py startapp sgin新增一个应用,在sgin目录下创建一个名为 templates 文件夹
修改项目根目录下的settings.py文件,将sgin应用进行注册,并将sgin目录下templates 文件夹加入到模板引擎查询目录中。
import os
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demo',
'sgin', # 添加应用
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'sgin/templates')], # 将sgin目录下templates 文件夹加入到模板引擎查询目录中
'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',
],
},
},
]
TEMPLATES 变量内容解析:
DIRS参数中添加在应用中的templstes文件夹一般情况下,是直接在项目根目录下创建templstes文件夹,设置 TEMPLATES 的 DIRS 值则为
'DIRS': [os.path.join(BASE_DIR,'templates')],
在 在sgin目录下的 templates 文件夹中新建一个 HTML 文件,并且将此文件命名为 events.html,然后在此文件中编写 HTML 代码
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试title>
head>
<body>
<h1 style="color: blue">测试分类h1>
<h3>{{ event_list }}h3>
body>
html>
模板传参:中使用{{ event_list }}
{{}}括起来的内容是一个模板的变量,其中event_list是变量名,用于接收视图函数中传递的数据
在sgin目录下的views.py文件中编写视图函数
from django.shortcuts import render
# Create your views here.
def event(request):
eventlist = [
'功能测试',
'性能测试',
'自动化测试'
]
return render(request,'events.html',{'event_list':eventlist})
**render方法:**render 是 View 层加载模板的一种方式,它封装在 django.shortcuts 模块中,它的作用是结合一个给定的模板和一个给定的字典,并返回一个渲染后的 HttpResponse 对象。通俗的讲就是把字典格式的内容, 加载进 templates 目录中定义的 HTML 文件, 最终通过浏览器渲染呈现。
render(request, template_name, context=None, content_type=None, status=None, using=None)
render方法参数解析:
templates\home\index.html, 参数就要写home\index.html;{'模板变量':视图函数变量}request、template_name、context为必传参数
最后在项目目录下urls.py 文件的 urlpatterns 列表中为event视图函数配置路由映射关系
from django.contrib import admin
from django.urls import path
from demo import views as demo_view
from sgin import views as sgin_view # 导入sgin应用中的视图
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',demo_view.index),
path('events/',sgin_view.event), # 将视图函数添加入路由配置中
]
执行 python manage,py runserver 命令启动项目,在浏览器中输入URL:http://127.0.0.1:8000/events/,视图函数中eventlist变量的内容,就通过模板的加载与响应展示到浏览器中了