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。
抱歉,写到这里,发现篇幅已经不短了。只好界面的实现放到下一节了。
分享到:
相关推荐
对于新闻类网站,Django的内置模型系统和管理界面非常适合创建文章、分类和用户管理系统。其强大的模板引擎和ORM(对象关系映射)支持快速开发动态内容。此外,Django还拥有出色的URL路由系统和内置的安全性措施,如...
11. **Django**:Django是Python的一个Web框架,遵循MTV(模型-模板-视图)设计模式,强调代码重用和“干”原则(Don't Repeat Yourself),用于快速开发安全且高效的Web应用。 12. **AngularJS/ReactJS/Angular**...
这份资料《Python和Ruby比较优缺点共1页.pdf》可能是对这两种语言在特性、性能、社区支持、学习曲线等方面的对比分析。虽然我们无法直接查看压缩文件的内容,但根据标题,我们可以基于通常的理解来探讨这两门语言的...
6. **通知公告**:发布宿舍管理相关的通知和规定,确保信息及时传达给所有相关人员。 7. **数据统计与报表**:系统能自动生成各类报表,如入住率统计、维修记录等,便于管理层决策分析。 8. **安全监控**:集成...
wint 是一个基于mvc易用的 java web框架,抛开了struts2 繁琐的配置,结合django,RoR,webx,play等框架的特点,使用约定优于配置的原则,使开发者能快速的搭建web和进行快速开发。 wint提供的主要功能有: 模板与...
3. **Ruby**:Ruby主要用于RoR(Ruby on Rails)框架,而Python有多个优秀的Web框架,如Django和Flask,且Python的生态系统更广泛。 4. **Lisp**:Lisp拥有强大的抽象能力,但对于日常脚本和应用开发,Python提供了...
4. **Ruby**:Ruby主要用于RoR(Ruby on Rails)框架,Python同样拥有类似的Web开发框架,如Django和Flask,但Python的生态系统更为庞大,功能更多样。 5. **Lisp**:Lisp拥有强大的抽象能力,但Python通过其模块化...
对于Ruby,尽管RoR框架非常流行,但Python同样拥有强大的Web开发框架如Django和Flask;至于Lisp和Perl,它们虽然在某些领域有独特之处,但在通用性上不如Python广泛;而对于C#、PHP、JavaScript,Python在一些场景下...
Python的标准库和第三方库(如Pandas、Django、Flask等)极大地扩展了其功能,覆盖了各种应用场景。此外,Python的社区活跃,文档齐全,学习资源丰富,对于非专业编程者提高工作效率非常有帮助。 综上所述,Python...
在后端,Django和Flask是最常用的两个框架。Django是一个全功能的框架,适合快速开发大型Web应用,而Flask则更为轻量级,适合小型项目和原型设计。 Node.js基于JavaScript运行时环境,它的非阻塞I/O模型使其在处理...
说到网络框架,Ruby的Ruby on Rail和Python的Django都相当轻巧好用,但Java下的框架,则要沉重很多。有人因此质疑Java语言本身是否符合网络时代的需求。Java大神们对这一问题嗤之以鼻。想要轻巧好用的框架?写一个给...
它旨在成为 lua 社区中最流行的 Web 框架,就像 python 中的 Django,ruby 中的 ROR。 特征 Bamboo 是一个 MVC 框架; 与 mongrel2、zeromq 和 redis 合作; 无状态处理程序; 强大的视图渲染引擎; 严格的单...
Ruby作为RoR(Ruby on Rails)框架的基础,通常与Web开发关联,但如果没有特定的Web开发需求,Python同样能提供优秀的Web框架,如Django和Flask。Lisp虽然在抽象和表达能力上有优势,但对于大多数人来说,学习曲线过...
随着开发技术的发展,越来越多的应用层技术开始流行,从早年革命性的 ROR,再到后来流行一时的 Django,以及在互联网企业广受欢迎的 Spring 技术体系,还有 NodeJS等等,而交互层面,除了智能手机和各种平台的小程序...
管理打印机和扫描文档是针对客户端打印和扫描方案的Javascript + Client App解决方案,旨在用于在任何Web平台(如ASP.NET,PHP,Django,Ruby On Rails(RoR),Express.js和更多的! 通过编写纯Javascript代码, ...
然而,Python在这些领域都有对应的解决方案,例如NumPy和Pandas用于数值计算,Django和Flask用于Web开发,而内置的高阶函数和列表推导式则提供了类似函数式编程的体验。Python的动态类型和垃圾回收机制使得开发者...
Ruby作为RoR(Ruby on Rails)框架的基础,对于Web开发有着出色表现,但Python的Django和Flask框架同样功能强大。Lisp虽然在抽象层次上有优势,但其独特的语法并不适合所有开发者。Perl虽然在文本处理上有独到之处,...
Ruby主要因RoR框架受欢迎,但Python有Django和Flask等优秀框架;Lisp用户可能更倾向于Python或Perl作为日常脚本语言;Perl的代码阅读难度大,而Python的可读性强;至于C#、PHP和JavaScript,它们各自在特定领域有...
例如,NumPy和Pandas用于数值计算,Matplotlib和Seaborn用于数据可视化,Django和Flask则是Web开发框架。 作者列举了一些不推荐的语言,如C/C++,因为它们需要手动管理内存,学习曲线较陡峭;Java虽然广泛使用,但...