上节我们说到了一个问题:就是如何让菜单出现在每个页面的左侧。

比如我们刚研发好的home.html,配上菜单看才会更好看。

这里有三个方法:

  1. 把菜单的html代码复制粘贴到 其他各个页面

    特点:完全不推荐这个方式。一百个页面难道要粘一百段菜单代码么。然后我新改动了菜单,就要手动去改动一百个页面,这简直在开玩笑。

  2. 把菜单的html代码做成组件,然后其他各个页面去调用,在页面上生成菜单

特点:比较不错。

3. 把菜单作为后台唯一能返回的html,也就是唯一的render函数内的那个html参数。然后在菜单welcome.html 中 把其他各个页面都当作一个子页面 一个来引入。

特点:和方法2逻辑相反,而且在很多js等静态资源导入上更简洁。比如100个页面都需要引入jquery.min.js文件,那么你只需要在welcome.html中引入一次,即可在所有页面中生效。

综上所述,各有利弊。我这里选用第三种方式了。

进行思考:后台以后所有的函数,返回的renede函数中的html 都是welcome.html菜单了,那么自己本身的页面要怎么传入呢?这里就需要我们再加一个参数,来作为真正要访问的页面html了。

所以本节先引入一个知识点:render函数都能往里面加什么东西。

render 我们之前的用法是:

里面只有俩个参数,一个request是本次请求的http信息。一个是html文件名。那么其实它还可以加第三个参数:字典。这一个字典 其实就等于 可以加无限个参数了。

比如这样:

那么这些参数 会用在哪呢?也就是说,怎么去调用出来呢?答案就是 这些参数是会作用在 html页面上!

用法就是。在html的静态代码中,加入{{ key1 }} 那么真正用户看到的 这里就变成来 字典中key1的值 1

我们来做个实验:

在home.html这个html里加入username参数名:一定用俩个大括号包起来。这样浏览器才会知道这里是个变量 需要去赋值。

我们进入url:http://127.0.0.1:8000/home/ 中看看效果:

暂时并没有什么显示,那是因为我们后台还没给返回username这个参数。让我们在后台函数home中加上username参数:

好,我们修改了后台views.py ,那么切换回浏览器后,django会自动重启,你需要等待它一下。然后刷新页面:

可以看到,已经显示出来了,这就是后台如何给前端html返回数据的一个途径。

好了。我们理解了这个概念,那么接下来还要学习新知识点:如何引入,这里大家如果听不太明白,就照葫芦画瓢即可,慢慢的自会了解。

打开welcome.html,在它里面 body标签内的最后位置加上一个空div,给这个div写一个属性。id 为 page1 ,如图:

然后在下面写一个script标签,script标签就是专门存放我们js代码的地方。

在script标签内写上一句代码:

$('#page1').load('/child/'+'{{ whichHTML }}/{{ oid }}/')

大家看到这句话可能问题比较多,这里直接复制就好,先简单跟大家说说是什么意思,这句话的意思是,一旦打开welcome.html, 那么就运行这句代码,这句代码会把id为page1的那个空div,给它的内容加载另一个url返回的页面。

这个url 我定位:'/child/'+'{{ whichHTML }}/{{ oid }}/' 它会返回我们真正的要访问的页面 home.html 其中的/child/一级路由只是我的个人习惯,以便自己知道这个路由是来找孩子(子页面)的。后面俩个 {{大括号,我们前面说了,浏览器会识别成变量,把我们的俩个参数的值都替换进来。这个whichHTML 就是我们真实要拿到的html的名字。后面的oid,也就是我预留出来的一个参数。以后可能用的上。万一welcome去接儿子home,结果home说你怎么证明你是我爸爸?拿出来证明。证明对了,儿子就跟着回家,证明不对,那么就?‍♀️同志跟你回家了,虽然我们今天的教程用不上这个证明参数,但是后续是一定用上的相信我。

好现在完成后是这样:

接下来去urls.py中,写这个/child/  url的映射关系吧~打开urls.py 加入这样一句:

 url(r"^child/(?P.+)/(?P.*)/$", child),  # 返回子页面

我们发现,多出来俩个没见过的东西:

这里解释一下,这是标准的正则写法。目的是获取url中的这俩个变量。

也就是说,这个url后面的俩段,并不是写死的一成不变的。而是一个变量,对应的是我们welcome.html中的 whichHTML 和  oid

因为是变量,所以我们这个正则写法可以完全匹配到并且获取里面的值。

接下来我们去写后端child函数。打开views.py,新增child函数

它只做一件事,就是真实的返回 我们目标html,在这里就是home.html,其中的eid,就是获取url中的 (?P.+) 的值,也就是我们welcome.html中的

{{ whichHTML }} ,也就是我们后台函数返回的子页面html的真实名字。

现在让我们来修改home函数,因为现在除了child函数外,所有的后台函数都要返回的是welcome.html,而原来的真正目标页面home.html则变成了区区字典里的一个值,它的key是 whichHTML 。

def home(request):    return render(request,'welcome.html',{"whichHTML": "Home.html","oid": ""})

oid 暂时用不上,为空即可。

让我们切换到浏览器,等待django重启(若中间报错停止了,就手动点击运行),再刷新页面看看效果:

可以看到,左侧的菜单成功显示了。但是我们发现。home.html的排版出问题了,怎么居中的东西全变成靠左了呢?

这是因为它现在的js/css静态资源 全被welcome.html给影响了,同一类型的js/css 在welcome.html和home.html中都被引入。而且版本不同,势必产生冲突。这就需要我们去解决了,这种情况之后会很常见。因为我们总是从网络上下载,导致资源不统一,我们这里可以采取一些办法,给它纠正过来。

我们打开home.html,发现我们设置居中的属性在body中,但是作为一个子页面加入了welcome.html后,body中的css设置被无视了

既然body不行了,那我弄个div 装这些东西吧,div的样式可不会被无视掉目前。

所以我们在body内 写个div

然后给它中间回车,分的大一点。

然后把下面的内容 剪切到这个div中来

变成如下图所示:

然后我们把body中的居中样式 给挪到div上:

然后回去刷新页面看看吧。

一切正常了~

之后的所有页面,都会和home.html的出现形势一样,都是作为子页面嵌入到welcome.html这个菜单页面中去。后面我就不会再详细关于这里的细节了。

好了今天分享到这里了。老规矩:过百日更,希望大家不要吝啬技术。勇于分享哦~

js代码自动排版_接口测试平台代码实现9:菜单常显相关推荐

  1. unittest 多个测试文件只开一次浏览器_接口测试平台代码实现75: 多接口用例15

    根据我们上一节最后的投票. 引入unittest框架 碾压了第一种.其实我个人也偏向这个.因为我尝试过很多,但是唯独没有引入unittest在接口测试平台中.所以借此机会,也想挑战一下,涨点经验. 请 ...

  2. html div分钟刷新一次啊代码_接口测试平台代码实现57首页重构5

    本节我们接着开发首页, 主要内容是 让左侧的请求记录和右侧的请求模块 联动起来. 具体联动需求: 右侧请求一次之后,左侧生成记录 点击左侧记录,右侧则会显示这次记录的请求数据 我们本节课的内容是想办法 ...

  3. ride上点击用例不能显示edit信息_接口测试平台代码实现61: 多接口用例1

    终于又序更上了,原谅最近作者几天事情不断. 按照我们之前的计划,需要迅速开启很重要的核心多用例接口. 首先,我们要确定,这个功能的大体设计. 就放在在我们的页面 用例库 中: 所以也就是我们很久之前就 ...

  4. 请求到后台百分号被删除原因_接口测试平台代码实现85: 全局请求头1

    本节开始要制作一些次要功能,但是也是非常实用的.比如项目内的全局请求头. 首先看我们的前端页面,这个全局请求头的按钮: 我的设计是呢,点击后,出现一个弹层,这个弹层里除了保存/取消按钮 标题外.要有一 ...

  5. html留言板代码_接口测试平台代码实现19.首页优化

    按照最近俩天 小伙伴的反馈激烈程度,本节课准备把首页添加一个非常有用户黏性的一个功能.公司内的各个超链接传送门! 新来的公司的小伙伴经常会因为找不到各个平台/文档的地址而发懵.老员工跨部门工作的时候也 ...

  6. html调后台接口_接口测试平台代码实现62: 多接口用例2

    好了,最近水了好多期,终于要写点代码了. 本节内容,我们搞定这个多接口的大用例 列表相关吧,难度基本为0,都是我们之前用到过的. 出现bug或者建议的 小伙伴可以直接留言或进微信群,但是可惜的是微信群 ...

  7. Python代码自动排版工具(PEP8风格),autopep8

    autopep8是一款将python代码自动排版为的工具,autopep8安装 1.安装autopep8 pip install autopep8 2.PyCharm配置autopep8 Progra ...

  8. visual studio代码自动排版

    visual studio代码自动排版 快捷键:Ctrl+K+D 菜单栏:编辑→高级→设置文档的格式

  9. 自动生成表格html,js实现自动生成表格功能的代码实例

    js实现自动生成表格功能的代码实例 发布时间:2020-07-18 17:45:52 来源:亿速云 阅读:115 作者:小猪 这篇文章主要讲解了js实现自动生成表格功能的代码实例,内容清晰明了,对此有 ...

最新文章

  1. 【opencv】11.旋转、翻转图片
  2. relocation R_X86_64_32S against `.data‘ can not be used when making a PIE object; recompile with -fP
  3. mysql中int(m)_mysql中int(M) tinyint(M)中M的作用
  4. SmartUpload上传下载及文件名和文件内容中文问题
  5. 龙蜥利器:系统运维工具 SysAK的云上应用性能诊断 | 龙蜥技术
  6. crosstool-ng构建的一个错误的解决
  7. python车牌识别系统开源代码_北京百万庄车牌识别的软件人气火爆
  8. get_posts 函数 | wordpress
  9. 宁愿月薪1万招新人,却不愿给月薪5千的老员工涨薪
  10. 乐视盒子UI 官方下载地址
  11. android6.0相机权限申请
  12. base64图片解码与编码
  13. 伙伴们,小毛祝你们新的一年神马都给力!!!
  14. openssh和openssl下载网址
  15. 论文笔记:Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks
  16. 文本聚类算法Java实现
  17. PHP字符串计算函数
  18. 你的态度,你的旅途风景
  19. 曲线积分、曲面积分、二重积分、三重积分、定积分之间的转换
  20. php随机壁纸api,【编码书生】Bing 随机壁纸 API

热门文章

  1. territory pop up window是否显示的逻辑,和transaction type差不多
  2. SAP Cloud for Customer里的Sales Lead和Lead
  3. SAP Cloud for Customer Service Control工作中心介绍
  4. Java动态代理之InvocationHandler最简单的入门教程
  5. c++代码转为go_Go调用C/C++
  6. 第一次参加学校的ACM比赛所学及感想
  7. linux apt-get dpkg,linux的sudo apt-get install 和dpkg -i package.deb命令
  8. 最长递增子序列的个数Python解法
  9. filepath直接指定到文件名吗_PyTest运行指定的测试集
  10. 取两个数较小值c语言_如何提升C语言安全性,达到RUST的安全性