传统的MVC
MVC代表Model-View-Controller(模型-视图-控制器)模式
- M(模型层):主要对数据库层的封装
- V(视图层):用于向用户展示数据
- C(控制层):用于处理用户请求、获取数据、返回结果(重要)
作用:降低模块之间的耦合性(解耦)
DJango的MTV模式
MTV代表Model-Template-View(模型-模板-视图)模式
- M(模型层):负责与数据库进行交互
- T(模板层):负责呈现内容到浏览器
- V(视图层):核心,负责接受请求、获取数据、返回结果
什么是模板?
- 模板是可以根据字典数据动态变化的HTML网页
- 模板可以根据视图中传递的字典数据动态生成相应的HTML
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', # 模板引擎
'DIRS': [BASE_DIR / 'templates'] # 模板的搜索目录,可以是多个
,
'APP_DIRS': True, # 是否要在应用中的template文件夹中搜索模板文件
'OPTIONS': { # 有关模板的选项
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
模板的载入方式
- 第一种方法
from django.template import loader
# 1.通过loader加载模板
t = loader.get_template("模板名称")
# 2.将t转成HTML字符串
html = t.render(字典数据)
# 3.用响应对象将转换的字符串内容返回给浏览器
return HttpResponse(html)
- 第二种方法
from django.shortcuts import render
return render(request,'index.html')
视图层与模板层的交互
- 视图函数可以将
python
变量封装到字典中传到模板内部
def template_view(request):
cpu_info = {
"CPU_Core": psutil.cpu_count,
"CPU_Used": psutil.cpu_percent
}
return render(request,'index.html',cpu_info) # 需要把cpu_info返回
- 模板中可以使用{{变量名}}的语法 调用视图传进来的变量
<blockquote class="layui-elem-quote layui-quote-nm">
处理器信息:{{ CPU_Core }} </p>
处理器使用率: {{ CPU_Used }}
</blockquote>
模板的变量
可以传到模板中的数据类型
注意以下调用方法不是对应类型的调用方法,只是告诉你有这些调用方法
数据类型 | 调用方法 |
---|---|
int整形 | {{变量名}} |
list列表 | {{变量名.index}} |
tuple元祖 | {{变量名.key}} |
dict字典 | {{对象.方法}} |
func方法 | {{函数名}} |
obj实例化对象 |
只不过是取值的时候会有不同
模板取值
代码语言:javascript复制def test_request(request):
dic = {}
dic['int'] = 100
dic['str'] = 'Alex'
dic['list'] = ['Addr','Beijing']
dic['dict'] = {"name","Alex"}
dic['func'] = say_hi
dic['class_obj'] = Dog()
print(dic)
return render(request,'test.html',dic)
def say_hi():
return "HHHH"
class Dog(object):
def say(self):
return "wang wang wang !"
代码语言:javascript复制<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<h1> int是 {{ int }}</h1>>
<h1> str是 {{ str }}</h1>>
<h1> list是 {{ list.0 }}</h1>> // 取列表值下标0
<h1> dict是 {{ dict }}</h1>>
<h1> function 是 {{ func }}</h1>>
<h1> class_obj 是 {{ class_obj.say }}</h1>> # 调用class_obj下的say方法
</head>
<body>
</body>
</html>