一、django的设计模式

1、传统MVC设计模式

(1)MVC(Model-View-Controller,模型-视图-控制器)模式。

  • M--模型层,主要用于对数据库的封装;
  • V--视图层,用于向用户展示结果(WHAT--什么数据 + HOW--怎么显示);
  • C--控制,用于处理请求、获取数据、返回结果;

(2)MVC设计模式的作用:降低模块之间的耦合度(解耦)

(3)示意图:

2、django的MTV设计模式

(1)MTV(Model-Template-View,模型-模板-视图)模式。

  • M-模型层,负责与数据库交互;
  • T-模板层,负责呈现内容到浏览器(HOW--怎么显示);
  • V-视图层,是核心,负责接受请求、获取数据、返回结果(WHAT--什么数据);

(2)MTV的作用与MTV是一致的,只是为了适应django框架自身的特点,将MVC的视图层拆成了T和V层;

(3)注意:django弱化了C层,但是实际上C层仍然存在,就是urls.py的path路由变量。在django中,控制层只负责做路由分发的作用。

(4)示意图:

二、模板层

1、什么是模板?

(1)模板是可以根据字典数据动态变化的html网页;

(2)模板可以根据视图中传递的字典数据动态生成相应的HTML网页。

2、模板配置

(1) 在项目根目录下创建templates文件夹。templates文件夹用于存放所有的html等样式文件。

(2)在setting.py文件中,修改TEMPLATES配置项。如下所示:

解释:

  • BACKEND:默认是django模板自研解析引擎,用于完成调用、分发模板数据的功能。也可以适用第三方的引擎。
  • DIRS:视图函数通过寻找DIRS下的路径,来找到对应html文件。DIRS是一个列表,用于存放拼接起来的html文件路径。
  • APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件。
  • OPTIONS:有关模板的选项。默认值,不用更改。

重点关注DIRS。

(3)示例:

其中BASE_DIR是项目根目录。

3、模板的加载方式一

(1)格式:通过loader获取模板,通过HttpResponse进行响应。

示例:

注:

  • loader.get_template("模板文件名"):根据文件名找到对应的HTML文件,并生成一个对象;
  • t.render(字典数据):字典数据即将HTML中需要的动态参数,以字典的方式传给html对象,并返回一个html字符串
  • 最后再通过HttpResponse返回浏览器显示。

(2)实战

a. 新建视图函数:

b. 新建html文件:

c. 增加url:

d. 测试结果

4、模板的加载方式二

(1)格式

(2)实战

a. 新建视图函数

b. 新建html文件

c. 增加url

d. 测试

三、总结

1、django的设计模式是MTV,实际是将MVC模式的V层拆成了T层和V层,原来的C层即django的urls.py。

2、模板层用于存放HTML等显示文件,并通过数据字典的方式将视图层传过来的参数进行解析、与HTML合在一起,并返回给浏览器。

3、加载模板有两种方式,一般使用第二种方式,即使用render()函数直接加载模板并响应模板。

django_设计模式和模板层的更多相关文章

  1. 03_Django-GET请求和POST请求-设计模式及模板层

    03_Django-GET请求和POST请求-设计模式及模板层 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn. ...

  2. Django的模板层简介

    Django的模板层 如果我们想要利用视图函数返回一个页面,一种比较简单的方式是利用HttpResponse()方法返回一个含有html内容的字符串: def current_datetime(req ...

  3. Django-5 模板层

    Django 模板层 在之前的例子中,我们采用了硬编码的方式,来返回文本 def current_datetime(request): now = datetime.datetime.now() ht ...

  4. django学习笔记-模板层

    模板层 将Python嵌入到HTML中. 模板简介 将HTML硬解码到视图并不是那么完美原因如下: 对页面设计时也需要对python代码进行相应的修改,模板可以不就行python代码修改的情况下变更设 ...

  5. django 实战篇之模板层

    模板层 ​ {{}} 变量相关 ​ {%%} 逻辑相关 ​ 前端获取容器类型的数据统一使用 句点符(.) ​ 两种给模板传递值的方式 return render(request,'index.html ...

  6. django——模板层

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  7. Django基础模板层(75-76)

    Django框架之模板层(d75)一 模版语法之变量: ** locals() 会把*该*视图函数内的变量,传到模板    ** return render(request, 'index.html' ...

  8. Django 的路由层 视图层 模板层

    --------------------------------------------------------------通过苦难,走向欢乐.——贝多芬 Django-2的路由层(URLconf) ...

  9. DjangoMTV模型之视图层views及模板层template

    Django视图层中views的内容 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容(render),也可以是一个重定向( ...

  10. python 全栈开发,Day69(Django的视图层,Django的模板层)

    昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...

随机推荐

  1. Android Studio: how to remove/update the “Created by” comment added to all new classes?

    By default Android Studio automatically adds a header comment to all new classes, e.g. /** * Created ...

  2. 手把手XTTS_V4迁移

    最近公司Oracle升级,考虑到停机时间等综合因数,最终选择了xtts数据迁移方案. 为此我整理了一份操作手册,方便以后查阅. 关于xtts的介绍可以参见这篇文章: <XTTS,又一个值得你重视 ...

  3. 快速搭建maven私服仓库并配置

    1.第一步,通过官方网站下载tar.gz包上传到服务器并解压 随后进入解压目录,并执行./bin/nexus start 此时可能会出现如下异常 处理这个问题很容易,找到bin下的nexus文件,vi ...

  4. java连接couchbase的memcache

    没有参考代码的时候重新写还是有点累的,这是重温了,第一次写的时候参考了别的一些乱七八糟的代码,虽然不是和这个一样的,不过在不懂的情况下还是很快写出来了,反而是这次光是找需要哪些jar都搞了半天,最后发 ...

  5. ComPiler200002:Growing a Compiler

    http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/gem/html/GrowingCompiler.html by Bill McKeeman and ...

  6. HTML学习笔记3----制作一个简易网站

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  7. 二进制安装K8S kubctl get node 返回No resources found

    问题描述:node节点kubelet服务启动成功后,在集群master节点执行命令具体结果如下截图 原因:kubelet设置的cgroups和docker的不一致导致 修改docker的cgroup, ...

  8. 在Ubuntu19.04系统中安装Emacs遇到的问题

    安装显示部分依赖软件包现在无法安装 发现emacs26无法安装 后来查阅资料,发现在Ubuntu18版本及以上就不需要更新了 即不需要以下操作: sudo apt update 同时安装也需要将ema ...

  9. VeeValidate 注册实例

    注册 1 安装: npm install vee-validate --save 2.mian.js 填写 import Vue from 'vue' import VeeValidate, {Val ...

  10. Automatic Workload Repository (AWR)自动工作负载存储库

    自动工作负载存储库 (AWR)是历史性能数据的存储库,其中包括系统.会话.单个 SQL 语句.段和服务的累积统计信息. AWR 统计数据是性能调优的基础.通过自动收集用于问题检测和调整的数据库统计信息 ...