博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django实战(6):对比RoR和Django的模板系统
阅读量:6204 次
发布时间:2019-06-21

本文共 1616 字,大约阅读时间需要 5 分钟。

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

如果你深入使用过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中定义:

 

foo foo foobar bar bar

下面居然就是主要内容了
 

 

然后这些内容块会分别插入到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 %}
default content of foo
{
% endblock %}...{
% block bar %}
default content of bar
{
% endblock %}

转载于:https://www.cnblogs.com/wuxl360/p/5787792.html

你可能感兴趣的文章
ETCD TLS 配置的坑
查看>>
JEE_JSP2.与Javascript,Web页面交互
查看>>
C++ STL 学习笔记__(8)map和multimap容器
查看>>
手把手教你搭建深度学习平台——避坑安装theano+CUDA
查看>>
07 | 行锁功过:怎么减少行锁对性能的影响?
查看>>
Oracle的表创建和事务管理
查看>>
【floyd求最小环】【Vijos 1046】【观光旅游】
查看>>
Ubuntu 安装 Emacs23.4
查看>>
微信公众平台消息接口开发(1)
查看>>
学习多线程 笔记
查看>>
Intellij IDEA Scala开发环境搭建
查看>>
python str使用笔记(更新)
查看>>
leetcode 242 有效的字母异位词
查看>>
读书笔记之:C++参考大全
查看>>
PYDay2-linux基础\常用命令
查看>>
《软件测试自动化之道》读书笔记 之 目录导航
查看>>
语义化标签
查看>>
Java数据类型和MySql数据类型对应表
查看>>
iOS的动态代理模式的实现
查看>>
内存架构
查看>>