1、本质上说:模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点共用部分和定义进行重载。
创建 base.html模板:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> <h1>我得时间表</h1> {% block content %}{% endblock %} {% block footer %} <hr> <p>谢谢对网站的支持</p> {% endblock %} </body> </html>
2、创建子模板test4.html
{% extends "base.html" %} {% block title %}现在时间{% endblock %} {% block content %} <p>现在时间是:{{nowtime}}</p> {% endblock %}
3、编写视图函数(views.py)
def test4(request): 51 now =datetime.datetime.now() 52 t=get_template('test4.html') 53 html=t.render(Context({'nowtime':now })) 54 return HttpResponse(html)
4、编写url(url.py)
rl(r'^test4/','mysite2.views.test4'),
5、说明
看起来很漂亮是不是? 每个模板只包含对自己而言 独一无二 的代码。 无需多余的部分。 如果想进行站点级的设计修改,仅需修改 base.html ,所有其它模板会立即反映出所作修改。
以下是其工作方式。 在加载 current_datetime.html 模板时,模板引擎发现了 {% extends %} 标签, 注意到该模板是一个子模板。 模板引擎立即装载其父模板,即本例中的 base.html 。
此时,模板引擎注意到 base.html 中的三个 {% block %} 标签,并用子模板的内容替换这些 block 。因此,引擎将会使用我们在 { block title %} 中定义的标题,对 {% block content %} 也是如此。 所以,网页标题一块将由 {% block title %}替换,同样地,网页的内容一块将由 {% block content %}替换。
注意由于子模板并没有定义 footer 块,模板系统将使用在父模板中定义的值。 父模板 {% block %} 标签中的内容总是被当作一条退路。
继承并不会影响到模板的上下文。 换句话说,任何处在继承树上的模板都可以访问到你传到模板中的每一个模板变量。
你可以根据需要使用任意多的继承次数。 使用继承的一种常见方式是下面的三层法:
- 创建 base.html 模板,在其中定义站点的主要外观感受。 这些都是不常修改甚至从不修改的部分。
- 为网站的每个区域创建 base_SECTION.html 模板(例如, base_photos.html 和 base_forum.html )。这些模板对 base.html 进行拓展,并包含区域特定的风格与设计。
- 为每种类型的页面创建独立的模板,例如论坛页面或者图片库。 这些模板拓展相应的区域模板。
这个方法可最大限度地重用代码,并使得向公共区域(如区域级的导航)添加内容成为一件轻松的工作。
以下是使用模板继承的一些诀窍:
- 如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。
- 一般来说,基础模板中的 {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。 俗话说,钩子越多越好。
- 如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。
- 如果你需要访问父模板中的块的内容,使用 {{ block.super }}这个标签吧,这一个魔法变量将会表现出父模板中的内容。 如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。
- 不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。 也就是说,block 标签不仅挖了一个要填的坑,也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的 {% block %} 标签,父模板将无从得知要使用哪个块的内容。
- {% extends %} 对所传入模板名称使用的加载方法和 get_template() 相同。 也就是说,会将模板名称被添加到 TEMPLATE_DIRS 设置之后。
- 多数情况下, {% extends %} 的参数应该是字符串,但是如果直到运行时方能确定父模板名,这个参数也可以是个变量。 这使得你能够实现一些很酷的动态功能。
相关推荐
主要介绍了Django模板继承 extend标签实例代码,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
python 零基础学习篇
它支持模板继承、变量替换、条件判断等常用功能,使开发人员能够更好地组织和呈现数据。 表单处理:Django提供了方便的表单处理功能,包括表单验证、数据清洗和错误处理。这使得开发人员能够轻松地创建和处理用户...
angular-blocks, Angular JS的模板继承 角块 使用 Jade 和 Django 启发了 AngularJS的模块样式模板继承。安装需要 jquery 。下载 angular-blocks.min.js 插件,或者安装。$ bower install angu
20-login_required装饰器21-列表和销毁视图22-表单实例和更新视图23-Django模板继承24-集成Bootstrap和Django 25-部署到Heroku 下一步: 在Django中配置电子邮件电子商务Tweetme 2 你在做什么? 让我知道... @...
使用Django1.9开发博客(6) - 模板继承 使用Django1.9开发博客(7) - 实现功能 使用Django1.9开发博客(8) - 继续完善 使用Django1.9开发博客(9) - 用户认证 使用Django1.9开发博客(10) - 全文搜索 使用...
一个使用django 1.7完成的个人博客代码,使用模板继承,django静态文件配置等内容。
主要介绍了详解Django项目中模板标签及模板的继承与引用【网站中快速布置广告】,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
目 录 第1章 Django建站基础 1 1.1 网站的定义及组成 1 1.2 网站的分类 3 1.3 网站运行原理及开发流程 5 1.4 走进Django 6 1.5 Django 2.0的新特性 7 ...5.2 模板继承 62 5.3 自定义过滤器 63 5.4 本章小结 68 ......
这是Django模板最强,也是最复杂的部分。利用模板继承机制,你可以创建一个骨架模板,里面包含一些公用内容。而那些个性内容则通过定义block(块)来允许子模板去重载。像极了Java的类继承
PyBossa 客户端应用程序的通用框架,以及基于该框架的一组客户端应用程序。 安装 ... Django 模板继承用于在应用程序之间共享代码。 app.json 中的 applion 定义可用作模板变量。 特别是,{{short_na
2、 、Django的特点 的特点 1) 强⼤的数据库功能:⽤python的类继承,⼏⾏代码就可以拥有⼀个动态的数据库操作API,如果需要也能执⾏SQL语句。 2) ⾃带的强⼤的后台功能:⼏⾏代码就让⽹站拥有⼀个强⼤的后台,轻松...
主要介绍了Django模板导入母版继承和自定义返回Html片段过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
html 文件可以使用 django 强大的模板继承。 阅读: 。Django 模板当前文件夹中的任何 html 文件都被视为 django 模板,并映射到映射其在磁盘上的位置的 URL。 例如 index.html 将在 /index.html 等上可用。 这些 ...
主要介绍了Django框架下静态模板的继承操作,结合实例形式分析了Django框架模板继承操作的相关原理与操作注意事项,需要的朋友可以参考下
第6章 模板 本章主要内容: 模板基础 模板语言 模板继承 PythonWeb开发基础教程-第6章-模板全文共26页,当前为第2页。 6.1模板基础 本节主要内容 配置模板引擎 使用模板类 使用模板文件 PythonWeb开发基础教程-第6...
它支持模板继承、变量替换、条件判断等常用功能,使开发人员能够更好地组织和呈现数据。 表单处理:Django提供了方便的表单处理功能,包括表单验证、数据清洗和错误处理。这使得开发人员能够轻松地创建和处理用户...
它支持模板继承、变量替换、条件判断等常用功能,使开发人员能够更好地组织和呈现数据。 表单处理:Django提供了方便的表单处理功能,包括表单验证、数据清洗和错误处理。这使得开发人员能够轻松地创建和处理用户...
使用go get安装/更新(pongo2不需要任何依赖项):go get -u github.com/flosch/pongo2如果您是pongo2 pongo2的继承者,请使用问题跟踪程序,它是Django语法(如templating-language)。 使用go get安装/更新(pongo...