为什么很多人学 Django 会懵?因为没搞懂 MVC 和 MTV 的真正区别
很多刚接触 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
Model
View
Controller
三层职责分离。
MVC 架构示意

请求流程:
1 用户发送请求 2 Controller 处理请求 3 Controller 调用 Model 获取数据 4 Controller 将数据传给 View 5 View 渲染页面 6 返回浏览器
MVC 三层职责
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
MVC 的核心思想只有一句话:
职责分离,降低耦合
2 Django 为什么不用 MVC
Django 的设计者在实践中发现一个问题:
在 Web 系统里,
Controller 经常非常臃肿。
很多事情都写在 Controller:
-
业务逻辑 -
数据查询 -
页面渲染 -
参数处理
于是 Django 的设计者做了一件事:
把 View 拆成两个部分。
一个负责:
数据
一个负责:
展示
于是 Django 提出了:
MTV 架构
3 Django 的 MTV 架构到底是什么
MTV =
Model
Template
View
结构如下:

MTV 三层职责
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
注意一个关键变化:
Controller 被弱化为 URL 路由系统。
也就是 Django 的:
urls.py
4 MVC vs MTV 架构对比
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
也就是说:
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 os
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR, 'templates')],
}
]
作用:
告诉 Django
HTML 模板在哪。
7 Django 加载模板的两种方式
Django 提供两种加载模板的方法。
方式一 loader
from django.template import loader
from django.http import HttpResponse
def index(request):
template = loader.get_template('index.html')
html = template.render()
return HttpResponse(html)
步骤:
1 获取模板 2 渲染模板 3 返回响应
代码稍微复杂。
方式二 render(推荐)
from django.shortcuts import render
def 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 模板
<h1>{{ title }}</h1>
<p>{{ user }}</p>
模板变量使用:
{{ 变量名 }}
这样页面就能动态显示数据。
9 从测试视角理解 Django 架构
如果你是软件测试工程师,理解 MTV 其实非常重要。
因为它决定了:
系统的可测试性。
在 Django 中:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
测试策略可以这样拆:

例如:
Model 测试:
-
ORM 查询 -
数据正确性
View 测试:
-
API接口 -
业务逻辑
Template 测试:
-
页面渲染 -
UI自动化
这种 架构级解耦,会让自动化测试更容易落地。
总结
今天我们讲清楚了三件事:
1 MVC 是经典架构
通过三层分离降低耦合。
2 Django 的 MTV 是 MVC 的演化
把展示逻辑进一步拆分。
3 模板层是 Django 前端渲染核心
负责动态 HTML 生成。
从软件测试角度看,MTV 结构还有一个巨大优势:
天然适合自动化测试。
因为:
业务逻辑、数据层、展示层完全分离。
这正是现代 Web 框架设计的核心思想。
如果你是做 测试开发 / 自动化测试 / AI测试工程师,理解 Django 架构其实非常重要。
因为很多企业内部的:
-
测试平台 -
自动化平台 -
AI测试助手
底层其实都是 Django 或 Flask 架构。
理解框架结构,测试才不会只是“点接口”。
而是真正理解:
系统是怎么运行的。
- 点赞
- 收藏
- 关注作者
评论(0)