ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

6.-Django设计模式及模版层

2022-01-12 11:31:31  阅读:185  来源: 互联网

标签:.- 模版 视图 Django html 标签 设计模式 block 变量


一、MVC (java等其他语言) MVC代表Model-view-Contorller(模型-视图-控制器)模式 M模型层主要用于对数据库层的封装 V视图层用于向用户展示结果 C控制器用于处理请求、获取数据、返回结果     二、Django的MTV模式 MTV代表 Model-Template-View(模型-模版-视图)模式 M模型层负责与数据库交互 T模版层负责呈现内容到浏览器 V视图层是核心,负责接收请求、获取数据、返回结果 作用:降低模块间的耦合度(解耦)   三、模版层 1.模版是可以根据字典数据动态变化的html网页 模版可以根据视图中传递的字典数据动态生成相应的html网页   2.模版配置 创建模版文件夹:项目路径下创建templates文件夹,与manage.py是同级的,可以在templates下创建html文件 在settings.py中TEMPLATES配置 1.BACKEND:指定模版的引擎 2.DIRS:模版的搜索目录(可以是一个或多个) 3.APP_DIRS:是否要在应用中的templates文件中搜索模版文件 4.OPTIONS:有关模版的选项   配置项中需要修改的部分 设置DIRS: DIRS':[os.path.join(BASE_DIR,'templates')] #设置模版层的绝对路径,将项目路径(BASE_DIR)+templates 拼接成模版的绝对路径   四、模版的加载方式 方案1.通过loader获取模版,通过HttpResponse进行响应 在views导包: from django.template import loader 1⃣.使用 loader.get_get_template('html文件名') 加载对应的模版文件 ,html文件名需要是模版下存在的html文件 2⃣.使用render()将加载的模版转化成html字符串 3⃣.用响应对象将转换的html字符串内容返回给浏览器 然后访问对应的路由地址,就可以访问的对应的html文件 方案2.使用render()直接加载并响应模版 在views导包:from django.shortcuts import render return render(request,'模版文件名',字典) #第三个参数必须是字典,可有可无         五、视图层与模版层之间的交互 1.视图函数可以将python变量封装导字典中传递到模版 示例: def xxx_view(request): d = {a:1,b:2} return render(request,'xxx.html',d) 2.模版中,我们可以用{{变量名}}的语法,调研视图传进来的变量 在视图函数将html页面要使用字典信息传递 在html页面 使用{{key}}的方式调用     六、模版的变量 视图函数中可以将python变量封装到字典中传递到模版上 能传递到模版中的数据类型很多,必须封装成字典再进行传递 str-字符串 int-整型 list-数组 tuple -元组 dict-字典 func-方法 ojb-类实例化对象     locals()方法 locals方法可以将当前的局部变量自动生成一个字典 return render(request,'xxx.html',locals() )   在模版中使用变量的语法 {{变量名}} {{变量名.index}} {{变量名.key}} {{对象.方法}} {{函数名}} 模版中调用变量的时候,如果变量不存在,页面不展示但是不会报错   七、模版层的标签 作用:将一些服务器端端功能嵌入模版中,例如if 、for流程控制等 标签语法,大部分标签需要加结束标签,否则会报错 {% 标签开始 %} ... {% 结束标签%} 例如if {% if条件表达式1%} #开始 {% elif条件表达式2%} {% elif条件表达式3 %} {% else %} {% endif %} #结束标签 在if标记中使用实际括号是无效的语法,如果需要指示优先级,则应使用嵌套的if标记   八、模版标签 - if 逻辑练习 写一个简单的计算器页面,能够在服务端进行的简单加减乘除计算,并且计算后保留上一次的记录 PS:前端表单提交action 指向要提交的路由,以/开头     九、模版标签-for标签 语法 {% for 变量 in 可迭代对象%} ..循环语句 {% empty %} ..可迭代对象为空的时候时候执行 {% endfor %}   for标签 内置变量-forloop forloop.counter 循环的当前迭代下标从0开始,会输出下标,不会输出内容 forloop.counter0 循环的当前迭代下标从0开始,会输出下标,不会输出内容 forloop.revcounter counter下标的倒序,会输出下标,不会输出内容 forloop.revcounter0 revcounter下标的倒序,会输出下标,不会输出内容 forloop.first 如果这是第一次循环,则为真 forloop.last 如果这是最后一次循环,则为真 f orloop.parentloop . 当嵌套循环 parentloop 表示外层循环 直接在for循环内使用     示例:           十、模版过滤器 定义:在变量输出时对变量的值进行处理 作用:可以通过使用过滤器来改变变量的输出显示 语法: {{变量 | 过滤器1:‘参数值1’ |过滤器2:‘参数值2’...}}   常用过滤器: lower :将字符串转换为全部小写 upper:将字符串转换为大写形式 safe:不对变量内的字符串进行html转义 add:"n" 将value的值增加n truncatechars:"n" 可以截取指定数量的字符,超过指定数量的字符省略,会将html标签字符也计算在内 truncatechars_html:"2":类似truncatechars,只是不会将html标签计算在内     十一、模版层的继承 html页面模版继承可以使父模版的内容重用,子模版直接继承父模版的全部内容,并可以覆盖模版中相应的块 语法-父模版中: 定义父模版中的块block标签 标识出哪些在子模块时允许被修改的 block标签:在父模版中定义,可以在子模版中覆盖   -子模版中 继承模版extends标签(写在模版文件第一行) 例如{% extends '父模版文件名.html'%}   子模版重写父模版中的内容块 {% block block_name %} block_name 为自定义标签名,在子模版中通过对应标签名去重写 子模版块用来覆盖父模版中 block_name 块的内容 {% endblock block_name%}   使用: 1.在子模版顶部继承 父模版 {% extends 'xxx.html' %} 2.然后打开子模版,全部内容会与父模版 3. 在父模版中的block块,在子模版中同样方法调用可以重写 父模版:   子模版: 继承父模版 没有在子模版写block的时候,子模版内容与父模版内容一致 写了父模版的同名block块,代表要重写该块,子模版中该块父模版的内容消失,展示子模版写的内容 没有block的地方,完全与父模版一致,内容继承 模版继承时,服务端的动态传参内容无法继承  

标签:.-,模版,视图,Django,html,标签,设计模式,block,变量
来源: https://www.cnblogs.com/Mickey-7/p/15791788.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有