版权所有 SinFrancis http://mdev.cc
最近房价疯涨,连二、三线城市的房子也如果脱缰野马一般,让工薪阶层实在是无奈。。。
不过Django中的模板还真有先见之明,使用继承制度,父辈的房子子女可以继承,不怕城管暴力拆迁。。。
编个故事:
老D生长在党旗下,贯彻了计划生育,有一个儿子叫小D。儿子渐渐长大,从小学到中学再到高中,也花费了老D不少的心血和金钱,儿子考上了北京XX大学,儿子去北京前,老D对小D说:儿啊,去北京好好读书,以后有机会就留在北京发展,不行就回来,我在老宅基地上给你建个小楼,以后啊你想回来发展就住那。于是老D还真在老宅基地上建了二层小楼,这个小楼在小D家乡不算大也不算小,光一楼就150㎡,里面没有装修,简单的家具而已。
4年之后,大学念完了,小D在外面奔波找工作,住在城中村,结果城市发展,城中村拆迁,小D不得不再次找房子,拿着那可怜的工资。
有这样过了2年,小D准备回家发展,于是回到家乡,用自己工作剩下的钱把房子装修了一下,每天在家接单办公。。。
是否悠哉?只有自己心里明白。。
老D建的房子就是父模板:base.html
小D回来装修就是继承了这个模板,往其中存放自己想要的东西:child.html
等到小D老了,房子给了小小D,那么小小D有可能再次将房子装修或者更换其中家具,但房子的主体没变。
在实际代码中应该是这样的
老D在房子中预留了可以装修的空间 ,比如
{%block middle%}
{%endblock%}
然后小D在其中进行装修:
小D的装修:
{%block middle%}
這個是中間的數據--{{name}}
{%endblock%}
小小D的装修:
{%block middle%}
<div style="background:green">
{{block.super}}
<Br/>
<h3>這個是Child2自己的內容</h3>
</div>
{%endblock%}
如果小D或者小小D想留下父亲在房子中间留下的东西,需要调用 {{block.super}}即可
Base.html的代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>{%block title%}{%endblock%}</title>
</head>
<body>
<!--包含頭文件-->
{%block header%}
{%include 'header.html'%}
{%endblock%}
<!--中間數據塊-->
{%block middle%}
{%endblock%}
<!--這個是父模版中的內容-->
{%block myContent%}
這個就是父模板的內容,如果你想調用這個內容,請使用block.super
{%endblock%}
<!--包含底部文件-->
{%block footer%}
{%include 'footer.html'%}
{%endblock%}
{%block test%}
{%endblock%}
</body>
</html>
child.html的代码:
{%extends "base.html"%}
{%block title%}
這個就是標題
{%endblock%}
{%block middle%}
這個是中間的數據--{{name}}
{%endblock%}
{%block myContent%}
{{block.super}}
{%endblock%}
child2.html的内容:
{%extends "child.html"%}
{%block title%}
{{block.super}}-這個是新加的標題
{%endblock%}
{%block middle%}
<div style="background:green">
{{block.super}}
<Br/>
<h3>這個是Child2自己的內容</h3>
</div>
{%endblock%}
{%block myContent%}
<div style="background:#336699">
{{block.super}}
</div>
{%endblock%}
数据代码:
def extend(request):
name = "LOLI"
return render_to_response("child.html",locals());
def extend2(request):
name = "LOLI2"
return render_to_response("child2.html",locals());
应该注意的地方:
1、继承并不改变 context 的工作方式,而且你可以按照需要使用多层继承。使用继承的一种常见方式是下面的三层法:
2、创建 base.html 模板,在其中定义站点的主要外观感受。这些都是不常修改甚至从不修改的部分。
3、为网站的每个区域创建 base_SECTION.html 模板(例如, base_photos.html 和 base_forum.html )。这些模板 对 base.html 进行拓展,并包含区域特定的风格与设计。
4、为每种类型的页面创建独立的模板,例如论坛页面或者图片库。这些模板拓展相应的区域模板。
这个方法可最大限度地重用代码,并使得向公共区域(如区域级的导航)添加内容成为一件轻松的工作。
以下是使用模板继承的一些诀窍:
1、如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。否则,模板继承将不起作用。
2、一般来说,基础模板中的 {% block %} 标签越多越好。记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。俗话说,钩子越多越好。
3、如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。
4、如果需要获得父模板中代码块的内容,可以使用 {{ block.super }} 变量。如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。
5、不可同一个模板中定义多个同名的 {% block %} 。存在这样的限制是因为block 标签的工作方式是双向的。也就是说,block 标签不仅挖了一个要填的坑,也定义了在 父 模板中这个坑所填充的内容。如果模板中出现了两个相同名称的{% block %} 标签,父模板将无从得知要使用哪个块的内容。
6、{% extends %} 对所传入模板名称使用的加载方法和 get_template() 相同。也就是说,会将模板名称被添加到TEMPLATE_DIRS 设置之后。
7、多数情况下, {% extends %} 的参数应该是字符串,但是如果直到运行时方能确定父模板名,这个参数也可以是个变量。这使得你能够实现一些很酷的动态功能。
可惜zh-CN的土地或者是房子不是继承制,而是在时间段内有效,大家都是游民而已。
故事编的不好,只是为了让大家更好的理解这个道理,看了文章,请轻拍砖。
分享到:
相关推荐
在Django中,Model用于处理数据模型,View负责业务逻辑和视图呈现,Template则是用于展示数据的模板系统。Django提供了一系列内置功能,如ORM(对象关系映射)、表单处理、认证与授权、URL路由、中间件等,极大地...
4. **继承与块**:Django模板支持模板继承,这使得我们可以创建一个基础模板(如`base.html`),其他模板可以继承并覆盖或添加内容。通过`{% extends %}`指令继承模板,然后用`{% block %}`定义可重写区域。 5. **...
【标题】:“django博客项目前端模板.rar”是一个与Python的Django框架相关的压缩包,它包含了一套完整的Django博客项目的前端模板。这个模板设计旨在为开发者提供一个基础的、可自定义的用户界面,用于展示博客内容...
Django自带一个面向对象的、反映数据模型与关系型数据库间的映射关系的映射器,开发者无须学习SQL语言即可操作数据库 灵活的URL映射。Django提供一个基于正则表达式的URL分发器,开发者可灵活地编写URL Django内置了...
模板语言支持继承、过滤器、标签等功能,使得界面设计更加灵活。 5. **URL路由(URL Conventions)**:URL配置是Django中至关重要的部分,它将URL模式映射到相应的视图函数。Django 4.0的URL配置更加强大和灵活,...
【django 模板中变量赋值】 在 Django 模板系统中,变量的赋值是通过模板语言来实现的。Django 模板语言是一种轻量级的语法,用于渲染动态内容。它允许开发者在 HTML 或其他静态文件中插入动态数据,如数据库查询...
- **变量**:在Django模板中,用双大括号`{{ }}`包裹的变量会被其对应的数据对象替换。例如,`{{ user.username }}`会显示用户对象的username属性。 - **标签**:标签是执行特定操作的代码片段,比如`{% if %}`和`...
【django 模板中变量赋值】 在 Django 模板系统中,变量赋值是通过模板语言实现的,主要用于展示动态生成的数据。Django 模板语言提供了多种方式来操作和展示模型、视图传递给模板的数据。以下是关于在 Django 模板...
描述中提到了“如果要是用Django开发”,这表明该模板是针对Django这一Python web框架设计的。Django是一个高级的、全面的Web框架,它允许开发者快速开发安全和可维护的网站。Django强调DRY(Don't Repeat Yourself...
- **模板继承**:介绍如何使用模板继承机制来复用公共的部分,提高代码的可维护性。 - **模板标签**:讲解如何自定义模板标签,扩展Django模板系统的功能。 #### 五、数据库交互:数据建模(第五章) - **ORM基础*...
通过这个项目,开发者可以学习到如何在Django中组织代码、处理用户输入、与数据库交互、创建动态网页以及优化静态资源的交付。此外,Django 1.7虽然较旧,但其核心概念在现代Django版本中仍然适用,因此学习这个项目...
- 虽然文件名中包含“js”,但 Django 的模板语言是用于生成 HTML 的,与 JavaScript 不同。这部分文档可能涵盖了 Django 模板语言的基本语法、内置标签和过滤器,以及如何在模板中操作数据。 6. **模块索引(py-...
13. Django中的安全问题:详细介绍了Django中的安全特性,包括防止常见的网络攻击手段,如点击劫持、跨站请求伪造(CSRF)等。 14. 异常处理:文档提供了一些常用的异常处理方法和策略。 15. 应用程序概览:解释了...
- Django 的模板继承机制允许创建一个基础模板,然后子模板可以继承并扩展这个基础模板,减少了重复代码。 - 基础模板通常包含通用布局,`{% extends 'base.html' %}` 标签用于指定父模板。 - 子模板可以通过 `{%...
Django:Django模板系统与HTML渲染.docx
Django支持模板继承,使得代码复用和维护更加便捷。 6. **URL路由(URL Routing)**: Django的URL路由系统允许我们定义URL模式,并将其与视图函数关联。这使得URL结构清晰,代码可读性高。 7. **表单(Forms)**...
在这一章中,您将了解到 Django 的基本理念,包括它的 MVC(模型-视图-控制器)变体MTV(模型-模板-视图)架构。Django 提供了内置的 ORM(对象关系映射)系统,用于数据库操作,以及强大的 URL 路由系统,使开发者...