【Django】设计模式及模板层

传统MVC

MVC 代表 ModeI-View-ControIler(模型-视图-控制器)模式。

  • M 模型层 (Model), 主要用于对数据库层的封装
  • V 视图层 (\/iew), 用于向用户展示结果 (WHAT + HOW)
  • C 控制 (ControlIer ,用于处理请求、获取数据、返回结果(重要))

作用:降低模块间的耦合度(解耦)

Django的MTV模式

MTV 代表Model-Template-View(模型-模板-视图)模式。

M 模型层 (ModeI) 负责与数据库交互

T 模板层 (Template) 负责呈现内容到浏览器 (HOW)

V视图层 (\/iew) 是核心,负责接收请求、获取数据、返回结果 (WHAT)

模板层

1.模版是可以根据字典数据动态变化的html网页

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

模板配置

创建模版文件夹<项目名>/templates

在settings.py中TEMPLATES配置项

  • BACKEND:置顶模板的引擎
  • DIRS:模版的搜索目录(可以是一个或多个)
  • APP_DIRS:是否要在应用中的 templates 文件夹中搜索模板文件
  • OPTIONS:有关模板的选项

配置项中需要修改的部分

设置

DIRS - 'DIRS':[os.path.join(BASE_DlR, 'templates')],

模板的加载方式

方案 1 

通过 loader 获取模板,通过 HttpResponse 进行响应

示例

在views.py中

def test_html(request):
    from django.template import loader
    #通过loader加载模版
    t = loader.get_template('test_html.html')
    #将t转换成html字符串
    html = t.render()
    #用响应对象将转换的字符串内容返回给浏览器
    return HttpResponse(html)

在templates文件夹下随便写一个html,名字要和views中的对应

然后去urls.py中把路由配置一下

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/',views.test_html)
]

启动测试一下,成功了

方案2

使用render()直接加载并响应模板

示例

在views.py中

def test_html(request):
    from django.shortcuts import render
    return render(request,'test_html.html')

其余和方案1一样

方案2相比方案1方便多了

视图层与模板层的交互

视图函数中可以将Python变量封装到字典中传递到模板

模板中,我们可以用{{变量名}}的语法调用视图函数传进来的变量

示例

在views.py中

def test_html(request):
    from django.shortcuts import render
    dic = {'name':'LiHua','age':18}
    return render(request,'test_html.html',dic)    

然后在html里调用dic中的值

访问,成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值