传统MVC
MVC 代表 ModeI-View-ControIler(模型-视图-控制器)模式。
- M 模型层 (Model), 主要用于对数据库层的封装
- V 视图层 (\/iew), 用于向用户展示结果 (WHAT + HOW)
- C 控制 (ControlIer ,用于处理请求、获取数据、返回结果(重要))
作用:降低模块间的耦合度(解耦)
Django的MTV模式
MTV 代表Model-Template-View(模型-模板-视图)模式。
M 模型层 (ModeI) 负责与数据库交互
T 模板层 (Template) 负责呈现内容到浏览器 (HOW)
V视图层 (\/iew) 是核心,负责接收请求、获取数据、返回结果 (WHAT)
模板层
1.模版是可以根据字典数据动态变化的html网页
2.模版可以根据视图中传递的字典数据动态生成相应的HTML网页
模板配置
创建模版文件夹<项目名>/templates
在settings.py中TEMPLATES配置项
- BACKEND:置顶模板的引擎
- DIRS:模版的搜索目录(可以是一个或多个)
- APP_DIRS:是否要在应用中的 templates 文件夹中搜索模板文件
- OPTIONS:有关模板的选项
配置项中需要修改的部分
设置
DIRS - 'DIRS':[os.path.join(BASE_DlR, 'templates')],
模板的加载方式
方案 1
通过 loader 获取模板,通过 HttpResponse 进行响应
示例
在views.py中
def test_html(request):
from django.template import loader
#通过loader加载模版
t = loader.get_template('test_html.html')
#将t转换成html字符串
html = t.render()
#用响应对象将转换的字符串内容返回给浏览器
return HttpResponse(html)
在templates文件夹下随便写一个html,名字要和views中的对应
然后去urls.py中把路由配置一下
urlpatterns = [
path('admin/', admin.site.urls),
path('test/',views.test_html)
]
启动测试一下,成功了
方案2
使用render()直接加载并响应模板
示例
在views.py中
def test_html(request):
from django.shortcuts import render
return render(request,'test_html.html')
其余和方案1一样
方案2相比方案1方便多了
视图层与模板层的交互
视图函数中可以将Python变量封装到字典中传递到模板
模板中,我们可以用{{变量名}}的语法调用视图函数传进来的变量
示例
在views.py中
def test_html(request):
from django.shortcuts import render
dic = {'name':'LiHua','age':18}
return render(request,'test_html.html',dic)
然后在html里调用dic中的值
访问,成功