很多刚接触 Django 的开发者,甚至包括不少测试工程师,在学习 Django 时都会遇到一个困惑:
为什么 Django 不叫 MVC,而是 MTV?
更奇怪的是:
很多教程还会说:
“Django 的 MTV 其实就是 MVC。”
这句话听起来很像,但其实 差别非常关键。
如果你理解了 MVC 和 MTV 的本质区别,你会突然发现:
Django 的架构其实非常适合大型系统开发和自动化测试。
今天我们就从软件工程和测试视角,彻底讲清楚这件事。
文章目录
- MVC 设计模式到底解决什么问题
- Django 为什么不用 MVC
- Django 的 MTV 架构到底是什么
- MVC vs MTV 架构对比
- Django 模板层的核心作用
- Django 模板配置实战
- Django 加载模板的两种方式
- 视图与模板的数据交互机制
- 从测试视角理解 Django 架构
1 MVC 设计模式到底解决什么问题
在 Web 开发早期,很多系统都存在一个问题:
代码全部混在一起。
例如:
- SQL 写在 HTML 里
- 业务逻辑写在页面里
- 数据处理写在控制器里
系统一旦复杂,维护几乎不可能。
于是软件工程领域提出了一个经典架构:
MVC
ModelViewController三层职责分离。
MVC 架构示意
请求流程:
1 用户发送请求 2 Controller 处理请求 3 Controller 调用 Model 获取数据 4 Controller 将数据传给 View 5 View 渲染页面 6 返回浏览器
MVC 三层职责
层 | 职责 |
Model | 数据层,负责数据库操作 |
View | 负责页面展示 |
Controller | 负责业务逻辑和请求调度 |
MVC 的核心思想只有一句话:
职责分离,降低耦合
2 Django 为什么不用 MVC
Django 的设计者在实践中发现一个问题:
在 Web 系统里,
Controller 经常非常臃肿。
很多事情都写在 Controller:
- 业务逻辑
- 数据查询
- 页面渲染
- 参数处理
于是 Django 的设计者做了一件事:
把 View 拆成两个部分。
一个负责:
数据
一个负责:
展示
于是 Django 提出了:
MTV 架构
3 Django 的 MTV 架构到底是什么
MTV =
ModelTemplateView结构如下:
MTV 三层职责
层 | 作用 |
Model | 数据层,负责数据库交互 |
View | 负责业务逻辑与数据处理 |
Template | 负责 HTML 展示 |
注意一个关键变化:
Controller 被弱化为 URL 路由系统。
也就是 Django 的:
urls.py4 MVC vs MTV 架构对比
MVC | Django MTV |
Model | Model |
View | Template |
Controller | View |
也就是说:
Django 的 View ≈ Controller
而 Django 的 Template ≈ MVC 的 View
这也是很多人刚学 Django 会懵的原因。
5 Django 模板层的核心作用
在 Django 里:
模板本质就是 HTML 文件。
但它不是普通 HTML。
它支持:
- 变量渲染
- 条件判断
- 循环
- 模板继承
模板的核心作用是:
动态生成页面。
数据流示意
6 Django 模板配置实战
要使用模板,首先需要配置。
第一步 创建 templates 目录
项目结构:
project ├─ manage.py ├─ project │ ├─ settings.py │ ├─ templates ├─ index.html第二步 修改 settings.py
找到:
TEMPLATES修改 DIRS:
import osTEMPLATES = [{ 'DIRS': [os.path.join(BASE_DIR, 'templates')],}]作用:
告诉 Django
HTML 模板在哪。
7 Django 加载模板的两种方式
Django 提供两种加载模板的方法。
方式一 loader
from django.template import loaderfrom django.http import HttpResponsedef index(request): template = loader.get_template('index.html') html = template.render() return HttpResponse(html)步骤:
1 获取模板 2 渲染模板 3 返回响应
代码稍微复杂。
方式二 render(推荐)
from django.shortcuts import renderdef index(request): return render(request,'index.html')一行解决。
Django 官方也推荐这种方式。
8 视图与模板的数据交互机制
很多人刚学 Django 最困惑的一件事:
Python 数据怎么传到 HTML?
答案是:
通过字典。
View 代码
def index(request): data = { "title": "Django课程", "user": "测试工程师" } return render(request,'index.html',data)HTML 模板
{{ title }}
{{ user }}
模板变量使用:
{{ 变量名 }}这样页面就能动态显示数据。
9 从测试视角理解 Django 架构
如果你是软件测试工程师,理解 MTV 其实非常重要。
因为它决定了:
系统的可测试性。
在 Django 中:
层 | 测试类型 |
Model | 数据测试 |
View | 接口测试 |
Template | UI测试 |
测试策略可以这样拆:
例如:
Model 测试:
- ORM 查询
- 数据正确性
View 测试:
- API接口
- 业务逻辑
Template 测试:
- 页面渲染
- UI自动化
这种 架构级解耦,会让自动化测试更容易落地。
总结
今天我们讲清楚了三件事:
1 MVC 是经典架构
通过三层分离降低耦合。

2 Django 的 MTV 是 MVC 的演化
把展示逻辑进一步拆分。
3 模板层是 Django 前端渲染核心
负责动态 HTML 生成。
从软件测试角度看,MTV 结构还有一个巨大优势:
天然适合自动化测试。
因为:
业务逻辑、数据层、展示层完全分离。
这正是现代 Web 框架设计的核心思想。
如果你是做 测试开发 / 自动化测试 / AI测试工程师,理解 Django 架构其实非常重要。
因为很多企业内部的:
- 测试平台
- 自动化平台
- AI测试助手
底层其实都是 Django 或 Flask 架构。
理解框架结构,测试才不会只是“点接口”。
而是真正理解:
系统是怎么运行的。