模板使用方式,模板继承思路讲解,高效编程"/>
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模板使用方式,模板继承思路讲解,高效编程
发布评论