Django MTV模式介绍,MTV与MVC的区别,Django模板使用方式,模板继承思路讲解,高效编程

编程入门 行业动态 更新时间:2024-10-11 23:26:17

Django MTV模式介绍,MTV与MVC的区别,Django<a href=https://www.elefans.com/category/jswz/34/1770549.html style=模板使用方式,模板继承思路讲解,高效编程"/>

Django MTV模式介绍,MTV与MVC的区别,Django模板使用方式,模板继承思路讲解,高效编程

目录

 

1.MTV设计模式

2.与java MVC模式的区别

3.细谈模板 Template

什么是模板

模板的配置

模板的继承

模板继承实例

模板继承用法总结


1.MTV设计模式

MTV为Model-Template-View(模型-模板-视图)模式,很好的诠释了分层开发模式,使开发团队解耦,可独立的开发属于自己一层的程序

作用:降低模块间耦合度,开发解耦,维护解耦。

各层详细说明:

Model:负责与数据库交互,这一类文件用于处理数据库字段对python对象的映射关系,并做一层封装,通常一个文件映射数据库中的一个表单。

Template:负责呈现内容到浏览器,一般为.html文件,该层通常用于显示Model文件的数据,并且让他更加可视化。

View:负责接收请求,相当于处理中枢,获取数据(来自用户) ,经过处理后选择合适的结果返回给用户。View层用于将Model层和Template层的文件封装,举例来说,当用于需要请求一个表单数据,View先通过Model文件拿到这份表单数据,但是这个数据需要有一个好看的格式输出,于是调用Template层,在该层中有一个文件将Model的数据做一个显示的处理,让他的视觉效果更好,做完这两件事后,View层将返回一个结果,用户就可以在网页上看到自己的请求内容了。

流程如图所示:

 

 

2.与java MVC模式的区别

MVC模式为 Model-View-Controller(模型-视图-控制器)

MVC与MVT的目的是一样的,即解耦各层关系,独立开发。

MVC和MTV要达到的目前是一样的,只是各层的叫法不一样,如果了解MVC模式,掌握MTV非常简单,MVC的各层如下:

Model模型层:对数据库层封装

View视图层:相当于MTV的Template模型层,显示内容

Controller控制层:处理请求,返回结果。相当于MTV的视图层

 

 

3.细谈模板 Template

什么是模板

模块是动态变化的html网页,在模板中定义好数据键,将Model拿到的的数据按照数据键的键名一一对应填入,如在模板中定义name=?,age=?,通过model拿到数据libai,40,于是我们看到的结果为name=libai,age=40。

简言之,模板可以根据传递的数据动态生成响应的HTML页面。

模板的配置

在项目目录下创建名为templates的文件夹(实际可以自定义,规划化最好命名为此),该文件通常与项目同级。

在setting.py文件中找到TEMPLATES这一变量

BACKEND:指定模板的引擎

DIRS:模板搜索的目录(可多个) 

APP_DIRS:是否要在应用的templates文件夹中搜索模板文件(通常为TRUE)

OPTIONS:有关模板的选项(初学可忽略,采用默认值)

模板的继承

模板继承可使父模板的内容重复利用,子模板也可以覆盖父模块的内容。

模板继承的应用场景非常多,举个简单的例子,如体育网站,在体育网站中,由于有非常多的体育项目,如果为每一个体育项目开发一个网页将耗费非常多的精力,我们不妨创建一个父模板,即定义整个页面风格张什么样,然后再对模板的部分地方进行改造,以此大幅度的缩短开发时间。

下面具个例子看看模板继承如何使用

模板继承实例

1) 创建一个项目

$ django-admin startproject test1

2)创建templates文件夹

在test1,即项目同级目录下创建templates,并创建base.html,page1.html,page2.html文件

$ mkdir templates
$ cd templates
$ touch base.html page1.html page2.html

 若完成创建,可以得到如下的项目结构

│  db.sqlite3
│  manage.py
│
├─templates
│      base.html
│      page1.html
│      page2.html
│
└─test1│  asgi.py│  settings.py│  urls.py│  wsgi.py│  __init__.py│└─__pycache__settings.cpython-36.pycurls.cpython-36.pycviews.cpython-36.pycwsgi.cpython-36.pyc__init__.cpython-36.pyc

改写base.html,即父模板,文章下面会讲解{% block Content1 %}的含义,现在请跟随案例操作

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>.div1,.div2{ width:300px; height:60px; margin-top:5px}.div1{ border:2px solid #F00}.div2{ border:4px dashed #F00}</style></head>
<body>这里是父模板<div class="div1">{% block Content1 %}区域1{% endblock Content1 %}</div><div class="div2">{% block Content2 %}区域2{% endblock Content2 %}</div></body>
</html>

 3)修改setting.py文件

找到TEMPLATE这一变量,修改成如下。这一步是为了让程序找到我们创建的templates文件夹

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,"templates")],'APP_DIRS': True,'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',],},},
]

4)创建views.py

创建视图文件,用于处理请求。render函数用于调用模板文件,该函数会在项目下进行检索,找到同名文件。

render格式

render(request,"模板名",参数组(通常为字典))

#如

render(request,"base.html",{'name':'libai','age':'40'})

from django.http import HttpResponse
from django.template import loader
from django.shortcuts import renderdef base index_view(request):return render(request,"base.html")def page1_view(request):return render(request,"page1.html")def page2_view(request):return render(request,"page2.html")

 5)定义路由规则

路由规则用于处理用户请求文件与本地函数的调用关系,用户请求base.html,则交给views文件下的base_view函数处理,注意要调入视图文件。

from django.contrib import admin
from django.urls import path
from . import viewsurlpatterns = [path('base.html',views.base_view),path('page1.html',views.page1_view),path('page2.html',views.page2_view),]

6) 启动项目

$ python manage.py runserver 127.0.0.1:8000

打开浏览器输入:http://127.0.0.1:8000/base.html

结果如下

 到这一步我们没有体现模板继承的概念,下面的操作将展示模板继承是如何发挥作用的

7)模板继承

改写page1.html,如下

{% extends 'base.html' %}{% block Content1 %}
这里是page1,改写了区域1
{% endblock Content1 %}{% block Content2 %}
这里是page1,改写了区域2
{% endblock Content2 %}r

改写page2.html 

{% extends 'base.html' %}{% block Content1 %}
这里是page2,改写了区域1
{% endblock Content1 %}{% block Content2 %}
这里是page2,改写了区域2
{% endblock Content2 %}r

 在浏览器输入:http://127.0.0.1:8000/page1.html

http://127.0.0.1:8000/page2.html

如下所示,我们可以看到效果了,通过{% extends 'base.html' %}继承父模板的所有内容,通过{% block Content1 %}改写区域内容

模板继承用法总结

子模板通过extends标签继承父模板

注意:需写在第一行

{% extends '父模板名' %}

定义父模板的block标签

标识出那些内容可以被子模板修改

格式如下

{% block block_name %}
内容
{% endblock block_name %}

 

 

更多推荐

Django MTV模式介绍,MTV与MVC的区别,Django模板使用方式,模板继承思路讲解,高效编程

本文发布于:2024-03-09 16:58:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1725537.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模板   高效   思路   区别   模式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!