前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
模板继承
关于模板,经常重复的编写页面是一个非常痛苦的事情;
那么在django
中也提供了一种非常舒服方便的方法,可以使新的模板页面来继承自一个已编写好的html
页面实现复用,免去重复工作;这就是模板继承
block
页面的继承不能说全部都拿过来,有时候只需要已经编写好的页面某些部分;其他部分提前挖好一些坑,去填充不同内容
挖坑可以通过模板中的{% block %}
标签
{% block name %}
预留区域,可供未来继承的页面覆盖
{% endblock name %}
设计一个可以被继承的父模板,我们经常叫做base.html
<!DOCTYPE html>
<html>
<head>
<title>
{% block title %}
父模板标题
{% endblock title %}
</title>
</head>
<body>
{% block top %}
<h3>父模板</h3>
{% endblock top %}
{% block content %}
<div>这里是父模板页面内容</div>
{% endblock content %} </body>
</html>
在这个页面中,我们设计了三个block
标签块title
、content
以及top
;
每一个块都可以被之后继承的页面所覆盖新的内容
- 继承页面使用
{% extends "base.html" %}
标签进行页面的继承,现在编写一个test.html
{% extends "base.html" %}
{% block title %}
子模版
{% endblock title %}
{% block top %}
<h3>子模板</h3>
{% endblock top %}
{% block content %}
<p>我是子模版</p>
{% endblock content %} </body>
{% block other %}
哈哈哈哈哈
这里的内容不会显示
父模板并没有这样的block块
{% endblock other%}
除了对应block
标签内容被子模板修改,其余内容均默认使用父模板中的
- 注意:
- 如果父模板内有模板变量或者其他上下文数据,不会被子模板继承,但是子模板可以为父模板内的模板数据赋值
- 如果需模板中具有模板变量等上下文数据,只有放到
block
标签块内数据才会显示 - 子模板中修改父模板中并不存在的block块,子模板不会显示
模板加载
除了{% extends %}
与{% block %}
结合的方式可以继承一个父模板
我们还可以使用{% include %}
一个新的标签进行模板加载,include
标签使用语法与extends
类似
include
现在新建一个html文件,名为li.html
,用来写一个简单的列表
<ul>
<li>吃饭</li>
<li>睡觉</li>
<li>玩耍</li>
<li>{
{ var }}</li>
</ul>
在需要导入的页面中使用{% include "li.html" %}
进行引入
{% extends "base.html" %}
{% block title %}
子模版
{% endblock title %}
{% block top %}
<h3>子模板</h3>
{% endblock top %}
{% block content %}
<p>我是子模版</p>
{% include "li.html" %}
{% endblock content %} </body>
被include
引入的新模板,会在渲染完成之后添加到父模板所给定的对应block
块中
与extends
不同,extends
常用来控制整个模板的样式和效果;而include
更加细化,可以在一个模板内包含其他多个模板
如果include
所包含的模板页面中有模板变量需要被填充,会在包含include
的页面下进行渲染;这种行为也好像是,把一个新的渲染好的html
页面嵌入了进来一样