Django设计模式及模板层
传统的MVC
MVC 代表 Model-View-Controller (模式 – 视图 – 控制器) 模式
✔️ M 模型层(Model):主要用于对数据库层的封装
✔️ V 视图层(View):用于向用户展示结果 (WHAT + HOW)
✔️C 控制 (Controller):用于处理请求、获取数据、返回结果
作用:降低模块间的耦合度(解耦合)
Django的MTV模式
MTV 代表 Model-Template-View (模型–模板–视图) 模式。
✔️ M 模型层(Model)负责与数据库交互
✔️ T 模板层 (Template) 负责呈现内容到浏览器(HOW)
✔️ V 视图层 (View) 是核心,负责接收请求、获取数据、返回结果(WHAT)
模板
模板是可以根据字典数据动态变化的html网页
模板可以根据视图中传递的字典数据动态生成响应的HTML网页
模板配置
创建模板文件夹 <项目名>/templates
在settings.py 中 TEMPLATES 配置项
BACKEND:指定模板的引擎
DIRS:模板的搜索目录(可以是一个或多个)
APP_DIRS:是否要在应用中的 templates 文件夹中搜索模板文件
OPTIONS:有关模板的选项
配置项中需要修改的部分
设置 DIRS :'DIRS':[os.path.join(BASE_DIR,'templates')]
模板的变量
视图函数中可以将Python变量封装到字典中传递到模板上:
样例:
def xxx_view(request): dic = { "变量1":"值1", "变量2":"值2", } return render(request,"xxx.html",dic)
能传递到模板中的 数据类型
str - 字符串 int - 整型
list - 数组 tuple - 元组
dict - 字典 func - 方法
obj - 类实例化的对象
在模板(html文件 )中使用变量的语法
- {{ 变量名 }}
- {{ 变量名.index }}
- {{ 变量名.key}} (字典)
- {{ 对象.方法 }}
- {{ 函数名 }}
模板的加载方式
方法一:HttpResponse()
通过 loader 获取模板,通过HttpResponse 进行响应
在视图函数中
或者
return HttpResponse(loader.get_template('index.html').render())
方法二: render()(推荐使用)
使用 render() 直接加载并响应模板
在视图函数中:
视图层与模板层之间的交互
视图函数中可以将 Python 变量封装到字典中传递到模板
在模板中,可以使用 {{ 变量名 }} 的语法 调用视图传进来的变量
views.py
templates/test_html.html
浏览器界面
模板标签
作用:将一些服务器端的功能嵌入到模板中,例如流程控制等
标签语法:
{% 标签 %} ........ {% 结束标签 %}
if 标签
- 语法
{% if 条件表达式1 %} ... {% elif 条件表达式2 %} ... {% endif %} # 结束标签
if 中使用括号不会改变优先级 而要使用嵌套的 if 实现
locals() 将当前范围内的局部变量封装成一个字典
mycal.html
配置路由(urls.py)
views.py 中 mycal.html的视图函数
如果请求是 GET 返回当前页面
如果请求是 POST 说明用户已经填好公式点击了提交,后端将用户提交的数据进行处理后返回
for标签
语法
{% for 变量 in 可迭代对象 %} ... 循环语句 {% emoty %} ... 可迭代对象无数据时填充的语句 {% endfor %}
内置变量 - forloop
模板层过滤器
模板过滤器
定义
在变量输出时对变量的值进行处理
作用
可以通过使用 过滤器 来改变变量的输出显示
语法
{{ 变量 | 过滤器1:'参数值1' | 过滤器2: '参数值2' ...}}
常用过滤器