`
luliangok
  • 浏览: 780993 次
文章分类
社区版块
存档分类
最新评论

Django实战(6):对比RoR和Django的模板系统

 
阅读更多

scaffold的生成物虽然用处不大,但是给我们带来一些最佳实践。其中就有模板的继承和分区。

如果你深入使用过rails的模板体系,那么恭喜你:你有超强的忍耐力!而且更重要的是,你只需要3分钟就可以理解Django的模板体系。

让我们先回顾一下rails的模板系统:

1. 你创建了一个xxxview,展现出一些数据。

2. 你意识到,各个view都有一些共同的内容。因为rails也强调DRY,所以你决定将这些共同的部分抽取出来。rails也看到了这点,所以你很高兴的看到,rails支持layout。

3. rails的layout很简单,类似html的代码,<%= yield %>部分会被具体视图替代,于是你很欣慰。

4. 但是等等,如何指定layout?你又兴奋地发现:默认的layout是views/layouts/application.html.erb,你可以在controller、action去指定特定的layout,甚至这种指定支持变量。在兴奋之余,你完全忽视了这等于让controller去做了view该做的事情。

5. 你实现了一个左右结构的layout,左侧是导航,右侧是内容。你认为这个layout应该可以被多个view使用。但是你又发现不同的view需要的导航是不同的。由于存在几个view使用一种导航、另外几个view使用另一个导航的情况,由于DRY,rails说,我有partial。在view中可以使用<%= render "foo/bar" %>,甚至可以使用变量:<%= render @mypartial %>然后在controller/action中指定具体的partial。:render :partial => ’foo/bar’。尽管,controller更进一步干预了view的细节;尽管,你又要记住:partial: foo/bar 意味着 views/foo/_bar.html.erb.

6. 如果view中的多块内容要插到layout的不同地方怎么办?除了主要的内容外,你还可以在view中定义:

然后这些内容块会分别插入到layout的<%= yield :foo %> <%= yield :bar %> 和<%= yield %>的地方。

7. 还有,还有,<%= stylesheet_link_tag "application" %>, <%= javascript_include_tag "html5" %> ……

到这里,你可以说自己已经了解rails的模板系统了吗?


接下来我们可以放松心情了,因为Django的模板很容易理解,除了基本的变量、标签、过滤器等之外,模板的关系只有两个:

1. 包含。将模板中的相同部分提取出来共用。

可以使用硬编码的字符串{% include ’foo/bar.html‘ %} 或者变量名 {% include template_name %},变量当然是在view中赋值(注意,不是controller中)

2. 继承。模板继承是Django解决共用页面区域DRY的一个优雅的解决方案。简单地说就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载(override)。基础模板中,将内容不同的部分指定各个内容块:

...
{% block foo %}
<div>default content of foo</div>
{% endblock %}
...
{% block bar %}
<div>default content of bar</div>
{% endblock %}
...

在子模板中指定继承关系并override各个内容块即可。继承的写法是{% extends "base.html" %}, 注意一定要放在模板的开头部分。

好了,你已经理解了Django的模板系统,下面对产品清单界面的改造就非常容易理解了。分成两个部分:base和productlist。


抱歉,写到这里,发现篇幅已经不短了。只好界面的实现放到下一节了。

分享到:
评论

相关推荐

    JavaWeb框架Wint.zip

    wint 是一个基于mvc易用的 java web框架,抛开了struts2 繁琐的配置,结合django,RoR,webx,play等框架的特点,使用约定优于配置的原则,使开发者能快速的搭建web和进行快速开发。 wint提供的主要功能有: 模板与...

    play java轻量级框架

    说到网络框架,Ruby的Ruby on Rail和Python的Django都相当轻巧好用,但Java下的框架,则要沉重很多。有人因此质疑Java语言本身是否符合网络时代的需求。Java大神们对这一问题嗤之以鼻。想要轻巧好用的框架?写一个给...

    bamboo:Bamboo 是基于 Mongrel2、ZeroMQ 和 NoSQL 数据库的 Lua 网络框架

    它旨在成为 lua 社区中最流行的 Web 框架,就像 python 中的 Django,ruby 中的 ROR。 特征 Bamboo 是一个 MVC 框架; 与 mongrel2、zeromq 和 redis 合作; 无状态处理程序; 强大的视图渲染引擎; 严格的单...

    “ 官网 ”最新版-《mysql-installer-community-8.0.30.0》

    随着开发技术的发展,越来越多的应用层技术开始流行,从早年革命性的 ROR,再到后来流行一时的 Django,以及在互联网企业广受欢迎的 Spring 技术体系,还有 NodeJS等等,而交互层面,除了智能手机和各种平台的小程序...

    JSPrintManager:先进的Java客户端打印和扫描解决方案

    管理打印机和扫描文档是针对客户端打印和扫描方案的Javascript + Client App解决方案,旨在用于在任何Web平台(如ASP.NET,PHP,Django,Ruby On Rails(RoR),Express.js和更多的! 通过编写纯Javascript代码, ...

    jobapp-reactjs:Reactjs,Tailwind

    前端导师-工作清单挑战欢迎! :waving_hand: 感谢您检查此前... 类别为: 角色:前端,后端,全栈级别:初级,中量级,高级语言:Python,Ruby,JavaScript,HTML,CSS 工具:React,Sass,Vue,Django,RoR(Ruby on R

    job-listings:前端导师| 工作清单

    前端导师-带有筛选的职位列表 欢迎! :waving_hand: 感谢您检查此前端编码挑战。 挑战可帮助您构建现实的项目,从而提高您的编码技能。 为了应对这一挑战,您需要对HTML,... 工具:React,Sass,Vue,Django,RoR

    iflux-scaffold:宜丰支架

    遥看Django和RoR都有非常好用的脚手架功能,快速的生成项目骨架,管理项目的依赖,以及一些自动化功能。大大的增强了我们的开发体验。Ok,It's time to build it.请使用**node0.12+**版本Usage:npm install -g iflux...

    工作清单

    前端导师-工作清单挑战欢迎! :waving_hand: 感谢您检查此前... 类别为: 角色:前端,后端,全栈级别:初级,中量级,高级语言:Python,Ruby,JavaScript,HTML,CSS 工具:React,Sass,Vue,Django,RoR(Ruby on

    挑战1

    前端导师-工作清单挑战 欢迎! :waving_hand: 感谢您检查此前端编码挑战。 挑战使您可以提高现实工作流程中的技能。 为了应对这一挑战,您需要对HTML,CSS和... 工具:React,Sass,Vue,Django,RoR(Ruby on

    codigo_reto_1

    前端导师-工作清单挑战欢迎! :waving_hand: 感谢您检查此前... 类别为: 角色:前端,后端,全栈级别:初级,中量级,高级语言:Python,Ruby,JavaScript,HTML,CSS 工具:React,Sass,Vue,Django,RoR(Ruby on

    静态工作清单

    前端导师-工作清单挑战欢迎! :waving_hand: 感谢您检查此前... 类别为: 角色:前端,后端,全栈级别:初级,中量级,高级语言:Python,Ruby,JavaScript,HTML,CSS 工具:React,Sass,Vue,Django,RoR(Ruby on

    来玩Play框架

    说到网络框架,Ruby的RubyonRail和Python的Django都相当轻巧好用,但Java下的框架,则要沉重很多。有人因此质疑Java语言本身是否符合网络时代的需求。Java大神们对这一问题嗤之以鼻。想要轻巧好用的框架?写一个给你...

    42_Corrections:42学校的更正文件

    42学校(巴黎)的更正文件 所有这些更正文件是42 School的专有财产。 禁止在42岁以下学校环境外或未经授权擅自复制,使用并视为侵犯版权。 ... 专案 全球 ...想查看主题和答案,请转到。 实习(阶段)

    42_Subjects:42学校的所有科目

    42 School(Paris)的所有学科 所有这些科目均为42 School的专有财产。 禁止在42岁以下学校环境外或未经授权擅自复制,使用并视为侵犯版权。 如果您想查看这些项目的更正文件,请点击。 诺姆42 专案 全球 ...其他

Global site tag (gtag.js) - Google Analytics