一、MVC和MTV

1.1. MVC

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

  • M模型层(Model),主要用于对数据库层的封装

  • V视图层(View),用于向用户展示结果(WHAT + HOW)

  • C控制(Controller),用于处理请求、获取数据、返回结果(重要)

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

07. Django基础:Django的设计模式及模板层_图层

1.2. MTV

Django的MTV设计模式

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

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

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

07. Django基础:Django的设计模式及模板层_html_02

1.3. MTV - 诞生记

07. Django基础:Django的设计模式及模板层_图层_03

二、模板层

2.1. 什么是模板

  1. 模板是可以根据字典数据动态变化的HTML界面
  2. 模板可以根据视图中传递的字典数据动态生成相应的HTML网页。

07. Django基础:Django的设计模式及模板层_数据_04

2.2. 模板配置

  1. 创建模板文件夹<项目名>/templates

  2. 在setting.py中TEMPLATES配置项

    • BACKEND:指定模板引擎
    • DIRS:模板的搜索目录(一个或多个)
    • APP_DIRS:是否要在应用的templates文件夹中搜索模板文件
    • OPTIONS:有关模板的选项
  3. 配置项中需要修改部分

    设置DIRS — ‘DIRS’:[os.path.join(BASE_DIR,‘templates’)]

  4. 效果07. Django基础:Django的设计模式及模板层_django_05

    2.3. 模板的加载方式

    1. 方案一:通过loader获取模板,然后通过HttpResponse进行响应

      在视图函数中

      from django.template import loader
      # 1. 通过loader加载模板
      t = loader.get_template("模板文件名")
      # 2. 将t转换成HTML字符串
      html = t.render(字典数据)
      # 3. 用响应对象将转换的字符串内容返回给浏览器
      return HttpResponse(html)
      

      07. Django基础:Django的设计模式及模板层_图层_06

      07. Django基础:Django的设计模式及模板层_数据_07

  5. 方案二:使用render()直接加载并响应模板

    在视图函数中

    from django.shortcuts import render
    return render(request,'模板文件名',字典数据)
    

    07. Django基础:Django的设计模式及模板层_django_08

三、视图层与模板层之间的交互
  1. 视图函数中可以将Python变量封装到字典中传递到模板。

    样例:

    def xxx_view(request):
    	dic = {
    		"变量1":"值1",
    		"变量2":"值2",
    	}
    	return render(request,'xxx.html',dic)
    
  2. 模板层中,可以使用{{变量名}}的语法调用视图传递来的变量

07. Django基础:Django的设计模式及模板层_图层_09
07. Django基础:Django的设计模式及模板层_加载_10