#1、MVC和MTV

1.1、传统的MVC

MVC 代表 Model - View - Controller( 模型 - 视图 - 控制器 )

  • M 模型层(Model) 主要用于对数据库层的封装
  • T 模板层(Template ) 用于向用户展示结果(what+how)
  • C 控制 (Controller) 用于处理请求、获取数据、返回结果(重要)

作用:降低模块间的耦合度(解耦)
image.png

1.2、Django的MTV模式

MTV 代表 Model - Template - View ( 模型 - 模板 - 视图 )模式。

  • M 模型层(Model) 负责与数据库交互
  • T 模板层(Template ) 负责呈现内容到浏览器(how)
  • V 视图层(View ) 是核心,负责接收请求、获取数据、返回结果(what)

作用:降低模块间的耦合度(解耦)
1646104754(1).png

2、模板层

2.1、什么是模板(Template)?

  • 模板是可以根据字典数据动态变化的html网页
  • 模板可以根据视图中传递的字典数据动态生成相应的HTML网页

Django的Template是如何工作的

Django的模板是静态的html文件,它只决定了一个页面的样式或外观。它需要视图View传递过来的变量(Variable)或内容对象(Context object)才能被渲染成一个完整的页面。这样做的好处是实现了样式与业务逻辑的分离,便于前端和后端Web开发人员各自完成自己的开发工作。

2.2、模板配置

2.2.1、创建模板文件夹

<项目名>/templates
image.png

2.2.2、在settings.py中配置TEMPLATES

配置项中需要修改TEMPLATES公有配置-设置DIRS
‘DIRS’: [os.path.join(BASE_DIR,”templates”)],

作用:

  • 指定从这个路径下寻找模板
  • 可以添加多个路径
  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. # 指定模板的引擎
  5. 'DIRS': [os.path.join(BASE_DIR,"templates")],
  6. # 模板的搜索目录
  7. # 指定从这个路径下寻找模板
  8. # 可以是一个或者多个
  9. 'APP_DIRS': True,
  10. # 是否要在应用中的templates文件夹中搜索模板文件
  11. # OPTIONS 有关模板的选项
  12. 'OPTIONS': {
  13. 'context_processors': [
  14. 'django.template.context_processors.debug',
  15. 'django.template.context_processors.request',
  16. 'django.contrib.auth.context_processors.auth',
  17. 'django.contrib.messages.context_processors.messages',
  18. 'user.context_processors.blog_context',
  19. ],
  20. },
  21. },
  22. ]

image.png

2.3、模板的加载方式

使用 render( ) 直接加载并响应模板

在视图函数中

  1. from django.shortcuts import render
  2. def index(request):
  3. return render(request, "index.html",字典数据)

2.4、视图层与模板层之间的交互

作用:视图向模板传递变量

视图函数中可以将Python变量封装到字典中,传递到模板

样例:

  1. from django.shortcuts import render, HttpResponse
  2. import json
  3. # Create your views here.
  4. # 新增的视图函数
  5. def index(request):
  6. data = {"blog_title":"我的博客"} # 将变量封装到字典中
  7. return render(request, "index.html",data) # data会传递到模板

模板中,我们可以用 {{ 变量名}} 的语法,调用视图传进来的变量

模板中,我们可以使用{{ 变量名字 }}的语法,调用视图传进来的变量
引用方式:{{ 变量名字 }}

在对应的index.html模板中 就可以使用 data字典里面的变量

  1. <a class="navbar-brand d-md-none d-lg-block" id="site-logo-name" href="/">
  2. <strong class="px-2">{{ blog_title }}</strong>
  3. </a>

Django的设计模式及模板层-d20-2 - 图5