Django Day 3
Django的设计模式以及模板层
MVC和MTV
传统的MVC代表Model-View-Controller(模型-视图-控制器)模式
模型层:主要用于对数据库层的封装;
视图层:用于向用户展示结果;(什么样的数据、数据拿到后怎么显示)
控制:用于处理请求、获取数据、返回结果
而Django是MTV的模式Model-Template-View(模型-模板-视图)
模型层:还是跟MVC中的一样负责于数据库进行交互,Django自带sql数据库。
模板层:负责呈现内容到浏览器(怎么显示,这里我们需要些js、css等东西即前端)
视图层:是核心,负责接收请求、获取数据、返回结果。
相当于把传统的V拆开了。
模板层 Template
什么是模板?
就是我天天念叨的html前端,是可以根据字典数据动态变化的html网页,它可以根据视图中传递的字典数据动态生成响应的html网页
模板配置
1.在项目里面创建文件夹templates
2.在settings.py中TEMPLATES配置项
(1).BACKEND:指定模板的引擎
(2).DIRS:模板的搜索目录(就是存放html的地方,用于加载前端页面,这是核心)
(3).APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件
示例:
'DIRS':[os.path.join(BASE_DIR,'templates')], # 注意BASE_DIR的用户返回的是当前文件的路径
模板的加载方式
在视图函数中
方案一 在早期的Django中是这样使用的
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, '模板文件名',字典数据)
视图层与模板层之间的交互
比如说我们从数据库中拿出来一个东西,需要传到网页上让用户看到,那么我们就可以用上render后面的第三个参数,然后通过{{ 变量名 }}来调用。(PS 由于python数据结构的强大,可以传入很多数据结构,不过都要通过字典来修饰)
def test_render(request):
from django.shortcuts import render
dic={'username' : '徐方林','age' : 19}
return render(request,"test_html.html",dic)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>
我是 {{ username }},我今年{{ age }}岁啦。
</h3>
<form method = 'post' action="test_html.html">
用户名:<input type = "text" name="uname">
<input type="submit" value = "提交"><!--只是用来复习一下提交按钮-->
</form>
</body>
</html>
页面如下

模板层-变量和标签
模板标签
python中的for语句等等可以运用于html中,通过标签来实现。
语法
{% if 表达式%}
{% endif %}
练习
写一个简单的计算器页面,能够在服务器端进行简单加减乘除计算
由于要提交数据给服务器,所以是一个post请求。
前端 Day2

浙公网安备 33010602011771号