当前位置: 首页 > news >正文

Django设计模式以及模板层介绍

MVC和MTV

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

Django的MTV模式

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

什么是模板

1、模板是可以根据字典数据动态变化的html网页
2、模板可以根据视图中传递的字典数据动态生成相应的HTML网页。

 模板配置

创建模板文件夹<项目名>/templates
在setting.py中TEMPLATES配置项
    1、BACKEND:指定模板的引擎2、DIRS:模板的搜索目录(可以是一个或多个)3、APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件4、OPTIONS:有关模板的选项
配置项中需要修改的部分
设置DIRS ——'DIRS': [os.path.join(BASE_DIR,'templates')],

模板的加载方式

方案1——通过loader获取模板,通过HttpResponse进行响应
在视图函数中
方案2——使用render()直接加载并响应模板
在视图函数中:
案例:
def test_html(request):from django.template import loadert = loader.get_template('test_html.html')html = t.render()return HttpResponse(html)#方案二直接加这两句即可from django.shortcuts import renderreturn render(request,'test_html.html')

视图层与模板层之间的交互

1、视图函数中可以将Python变量封装到字典中传递到模板
2、模板中,我们可以用{{变量名}}的语法 调用试图传进来的变量
案例:
    from django.shortcuts import renderdic = {'username':'gyq','age':18}return render(request,'test_html.html',dic)#html页面
<body><h3>{{ username }}是模板层的~~~</h3>
</body>

模板的变量

能传递到模板中的数据类型
在模板中使用变量语法

模板标签

作用:将一些服务端的功能嵌入到模板中,例如流程控制等

标签语法

模板标签-if标签语法

案例:
#views
def test_if_for(request):dic = {}dic['x'] = 10    return render(request,'test_if_for.html',dic)#HTML
<body>{% if x > 10 %}今天天气很好{% else %}今天天气非常好{% endif %}
</body>

模板标签-if标签-练习

模板标签 - for标签

语法:

内置变量 - forlop

#VIEWS
def test_if_for(request):dic = {}dic['x'] = 10dic['lst'] = ['Tom','Jack','Lily']return render(request,'test_if_for.html',dic)
#HTML  
  {% for name in lst %}{% if forloop.first %} &&&&&& {% endif %}<p> {{ forloop.counter }} {{ name }}</p>{% if forloop.last %} ===== {% endif %}{% empty %}当前没数据{% endfor %}

模板过滤器

定义:在变量输出时对变量的值进行处理
作用:可以通过使用过滤器来改变变量的输出显示
语法:{{变量|过滤器1:‘参数值1’|过滤器2:‘参数值2’...}}

常用过滤器

案例
<!--过滤器演示  -->
<h3>int 是 {{ int|add:2}}</h3>  
<h3>str 是 {{ str|upper }}</h3>

模板的继承

模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块

语法 - 父模板中:

定义父模板中的块block标签(允许被子模板修改的部分)
标识出哪些在子模板中是允许被修改的
block标签:在父模板中定义,可以在子模板中覆盖

语法 - 子模板中

  继承模板extends标签(写在模板文件的第一行)例如{%extends 'base.html'%}子模板 重写父模板中的内容块{% block block_name %}子模板用来覆盖父模板中 block_name 块的内容{% endblock block_name %}    #(结束符的block_name可以省略)
重写的覆盖规则   
不重写,将按照父模板的效果显示
重写,则按照重写效果显示
注意
模板继承时,服务器端的动态内容无法继承
案例:
#父模板
<meta charset="UTF-8">{% block mytitle %}<title>主页</title>{% endblock %}
</head>
<body>{{ lst }}<a href="/music_index">音乐频道</a>    #注意:此处定义的是路由url,不是html普通超链接<a href="/sport_index">体育频道</a>    #注意:此处定义的是路由url,不是html普通超链接{% block info %}这是主页{% endblock %}<h3>有任何问题联系XXXX</h3></body>
#子模板继承父类,重写
{% extends 'base.html' %}{% block mytitle %}<title>音乐频道</title>
{% endblock %}{% block info %}欢迎来到音乐频道
{% endblock %}

模板的继承

父模板 - 定义可被修改的block
子模板 - 继承父模板;按需修改父模板中定义的block

URL反向解析

代码中url书写规范
1、绝对地址
   http://172.0.0.1:8000/page/1
2、相对地址
方式1
方式2
#HTML
<body><a href="http://192.168.40.135:8000/test_url_result">绝对地址</a><a href="/test_url_result">带'/'的相对地址</a><a href="test_url_result">不带'/'的相对地址</a></body>
#URL 
 #http://192.168.40.135:8000/test/urlpath('test/url',views.test_url),path('test_url_result',views.test_url_result)

URL反向解析

url反向解析是指在视图或模板中,用path定义的名称来动态查找或计算出相应的路由

path函数的语法

path(route,views,name="别名")
path('page',views.page_view,name="page_url")
根据path中的'name='关键字传参给url确定了唯一确定的名字,在模板或试图中,可以通过这个名字反向推断出此url信息。
模板中 - 通过url标签实现地址的反向解析
案例
#url  
path('test_url_result/<int:age>',views.test_url_result,name='tr')
#html
<a href="{% url 'tr' '100' %}">url反向解析版本</a>
#views
def test_url_result(request, age):return HttpResponse('---test url res is ok')
在视图函数中 ->可调用django中的reverse方法进行反向解析
案例
#views
def test_url_result(request, age):#302跳转from django.urls import reverseurl = reverse('base_index')return HttpResponseRedirect(url)
#url
path('base_index',views.base_view, name='base_index')
静态文件配置 - settings.py
1、配置静态文件的访问路径【该配置默认存在】   
 通过哪个url地址找静态文件STATIC_URL = '/static/'说明:指定访问静态文件时是需要通过/static/xxx或http://127.0.0.1:8000/static/xxx[xxx表示具体的静态资源位置]
2、配置静态文件的存储路径STATICFILES_DIRS
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)    #注意需要加逗号,因为这是一个元组

静态文件访问

方案1 - 直接拼接访问路径
#绝对路径
<img src="http://192.168.40.135:8000/static/image/django.jpg" width="288px" height="288">
#相对路径
<img src="/static/image/django2.jpg" width="288px" height="288">
方案2—动态写法
通过{% static %}标签访问静态文件
1、加载static - {% load static %}
2、使用静态资源 - {% static '静态资源路径' %}
3、样例
<img src="{% static 'images/lena.jpg' %}">
#使用案例   
 {% load static %}<img src="{% static 'image/django2.jpg' %}" width="288" height="288">

什么是应用

应用在Django项目中是一个独立的业务模块,可以包含自己的路由、视图、模板、模型

创建步骤

1、用manage.py中的子命令startapp 创建应用文件夹
python3 manage.py startapp 应用名
2、在settings.py的INSTALLED_APPS列表中配置安装此应用

分布式路由

Django中,主路由配置文件(urls.py)可以不处理用户具体路由,主路由配置文件的可以做请求的分发(分布式请求处理)。具体的请求可以由各自的应用来进行处理。

配置分布式路由

步骤1、主路由中调用include函数
语法:include('app名字.url模块名')
作用:用于将当前路由转到各个应用的路由配置文件的urlpatterns进行分布式处理
步骤2、应用下配置urls.py
应用下手动创建urls.py文件,内容结构同主路由完全一样
然后再应用下的views.py中定义函数验证
练习-配置分布式路由
1.创建两个应用
1.创建sport应用,并注册
2.创建news应用,并注册
2.创建分布式路由系统

应用下的模板

应用内部可以配置模板目录

指定访问某个应用页面

在应用模板下创建与应用同名文件夹,然后将需要访问的页面存放在

相关文章:

Django设计模式以及模板层介绍

MVC和MTV 传统的MVC作用&#xff1a;降低模块间的耦合度&#xff08;解耦&#xff09;Django的MTV模式 作用&#xff1a;降低模块间的耦合度&#xff08;解耦&#xff09;什么是模板 1、模板是可以根据字典数据动态变化的html网页2、模板可以根据视图中传递的字典数据动态生成相…...

Linux信号一门搞定

1.信号是什么&#xff1f; 信号其实就是一个软件中断。 例&#xff1a; 输入命令&#xff0c;在Shell下启动一个前台进程。用户按下Ctrl-C&#xff0c;键盘输入产生一个硬件中断。如果CPU当前正在执行这个进程的代码&#xff0c;则该进程的用户空间代码暂停执行&#xff0c;…...

手撸一个动态Feign,实现一个“万能”接口调用

Feign&#xff0c;在微服务框架中&#xff0c;是的服务直接的调用变得很简洁、简单&#xff0c;而不需要再编写Java Http调用其他微服务的接口。 动态feign 对于fegin调用&#xff0c;我们一般的用法&#xff1a;为每个微服务都创建对应的feignclient接口&#xff0c;然后为每…...

Linux Capabilities 入门

目录 Linux capabilities 是什么&#xff1f; capabilities 的赋予和继承 线程的 capabilities Permitted Effective Inheritable Bounding Ambient 文件的 capabilities Permitted Inheritable Effective 运行 execve() 后 capabilities 的变化 案例 Linux capab…...

驱动 day6

关于设备树的理解&#xff1a; 设备树&#xff08;Device Tree&#xff09;是一种用于特定硬件设备的解释语法树。它用来表示存储有关主板硬件和CPU架构信息的数据在内核中的传递格式&#xff0c;使内核可以更好地了解硬件并支持它们&#xff0c;而不必编写固定的代码。设备节点…...

附录2-tensorflow目标检测

源码来自作者Bubbliiiing&#xff0c;我对参考链接的代码略有修改&#xff0c;网盘地址 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;dvb1 目录 1 参考链接 2 环境 3 数据集准备 3.1 VOCdevkit/VOC2007 3.2 model_data/voc_classes.txt 3.3 voc_an…...

常见的EMC问题

电磁兼容设计的目的就在于满足产品功能要求、减少调试时间&#xff0c;使产品满足电磁兼容标准的要求&#xff0c;并且使产品不会对系统中的其它设备产生电磁干扰。 电磁兼容设计中常见的问题有哪些&#xff1f; 1、电磁兼容设计可以从电路设计&#xff08;包括器件选择&…...

Redis内存存储效率问题

目录 内存碎片是如何形成的&#xff1f; 如何判断是否有内存碎片&#xff1f; 如何清理内存碎片&#xff1f; INFO命令 面向 Prometheus 的 Redis-exporter 监控 实习期间&#xff0c;了解到&#xff0c;企业级开发中多个项目使用Redis&#xff0c;运行Redis实例的有可能是…...

3.28 haas506 2.0开发教程-example-蓝牙多设备扫描(仅支持M320,HD1)

haas506 2.0开发教程-example-蓝牙多设备扫描案例说明蓝牙信息克隆1.手机蓝牙改名信息克隆代码测试案例说明 开发板扫描蓝牙设备&#xff0c;获取并打印蓝牙设备mac地址。mac地址每个设备不同&#xff0c;且不能更改。本案例仅适用于M320开发板和HD1-RTU。案例使用手机与iBeac…...

C语言经典编程题100例(41~60)

目录41、习题4-4 特殊a串数列求和42、习题4-6 水仙花数43、习题4-7 最大公约数和最小公倍数44、习题7-5 找鞍点45、练习5-1 求m到n之和46、练习5-2 找两个数中最大者47、练习5-3 数字金字塔48、习题5-1 符号函数49、习题5-2 使用函数求奇数和50、习题5-3 使用函数计算两点间的距…...

git日常使用命令

实习这段时间使用了很多git指令来提交代码&#xff0c;简单记录一下日常使用的指令&#xff1a; 提交代码通常顺序&#xff1a; 1.git status 查看本地修改项 2.git add . 提交全部文件 &#xff08;这个 .是全部文件&#xff09;到暂存区 3.git commit -m ‘本次提交的说明’…...

ES6对象展开运算符浅拷贝or深拷贝

ES6中提出的对象展开运算符“…”就是用来展开元素的。有了它就不用代码循环遍历了&#xff0c;偷懒专用。 1. 合并数组 展开原有数组中的所有元素&#xff0c;可以合并成一个新的数组。 var a[1,2,3]; var b[4,5,6]; var c[...a,...b]; console.log(c) // 输出&#xff1a;…...

leaflet 上传包含shp的zip文件,在map上解析显示图形(059)

第059个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包含shp的zip文件,利用shapefile读取shp数据,并在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果加载shapefile.js方式安装引用jszip(…...

CAN总线详细介绍

1.1 CAN是什么&#xff1f; CAN 最终成为国际标准 &#xff08; ISO11898(高速应用)和 ISO11519&#xff08;低速应用&#xff09;&#xff09;&#xff0c;是国际上应用最广泛的现场总线之一。 1.2 CAN总线特点 多主方式: 可以多主方式工作&#xff0c;网络上任意一个节点…...

python如何完成对 Excel文件的解密后读取?

通常为了防止重要的Excel文件数据内容的泄露&#xff0c;需要对文件整体进行加密与解密的操作。 对于文件的加解密过程&#xff0c;python也有很多非标准库来帮助我们完成操作&#xff0c;这里主要说明如何完成对Excel文件的解密与读取操作。 这里我们使用到的是msoffcrypto-…...

微服务实战--高级篇:RabbitMQ高级

服务异步通信-高级篇 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送…...

autoCAD2022 - 设置新的原点

文章目录autoCAD2022 - 设置新的原点概述笔记UCS原点设置功能的菜单位置ENDautoCAD2022 - 设置新的原点 概述 上次整板子的dxf时, 原来的原点不合适, 想调整一下. 当时整完了, 没记录. 这次用的时候, 又找半天… 设置新原点的功能, 不在顶部菜单中, 而是在视图右上角的UCS图标…...

spring boot 配置 mybatis-plus多数据源

简介Mybatis-puls 多数据源的使用&#xff0c;采用的是官方提供的dynamic-datasource-spring-boot-starter包的 DS 注解&#xff0c;具体可以参考官网&#xff1a;https://gitee.com/baomidou/dynamic-datasource-spring-boot-starterpom.xml文件引入如下依赖主要引入dynamic-d…...

独立产品灵感周刊 DecoHack #047 - 安卓手机上最有用的APP

本周刊记录有趣好玩的独立产品设计开发相关内容&#xff0c;每周发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到&#xff0c;建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。&#x1f4bb; 产品推荐 1. Bouncer Tempor…...

【面试题】JavaScript中递归的理解

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库递归 RecursionTo iterate is human, to recurse, divine. 理解迭代&#xff0c;神理解递归。本文会以 JavaScript为主、有部分 Rust 举例说明。…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...