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
变量描述forloop.counter循环的当前迭代 从 1 开始索引 forloop.counter0循环的当前迭代 从 0 开始索引 forloop.revcountercounter值的倒序forloop.revcounter0counter0值的倒序forloop.first如果这是第一次循环 则为真forloop.last如果这是最后一次循环 则为真forloop.parentloop当循环嵌套 parentloop表示外层循环
模板层过滤器
模板过滤器
定义
在变量输出时对变量的值进行处理
作用
可以通过使用 过滤器 来改变变量的输出显示
语法
{{ 变量 | 过滤器1: 参数值1 | 过滤器2: 参数值2 ...}}
常用过滤器
过滤器说明lower将字符串转换成小写upper将字符串转换成大写safe默认不对变量内的字符串进行html转义add: ‘n’将value的值增加 ntruncatechars:‘n’如果字符串字符多于指定的字符数量 那么会被截断。阶段的字符串将以可翻译的省略号序列 “…” 结尾。……


