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中定义:

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 %}
<div>default content of foo</div>
{% endblock %}
...{% block bar %}
<div>default content of bar</div>
{% endblock %}

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

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

  1. asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...

    http://blog.chedushi.com/archives/910 结论: 点评一下吧.django就是个渣,不多废话了.webpy的代码很简洁,可惜速度太慢了.bottle看起来快一点,不过 ...

  2. 《Django实战系列》

    这个实战系列暂时就告一段落了,时间和能力的关系,有些地方写的不够清楚明白,代码也没有整理出来.未尽事宜将在以后逐步补全. 希望通过这个系列,你能够掌握使用Django开发一个web应用的基本过程.现在 ...

  3. Django实战—— Web可视化漏洞扫描器

    QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群6493473 ...

  4. django debug=false后静态文件丢失_python框架Django实战商城项目之工程搭建

    项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...

  5. python开发商城实战_python框架Django实战商城项目之工程搭建

    项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...

  6. Django实战技巧(2)-git代码仓分支管理技巧

    Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...

  7. 【Youtobe trydjango】Django2.2教程和React实战系列四【创建Django应用】

    [Youtobe trydjango]Django2.2教程和React实战系列四[创建Django应用] 1. 创建应用 2. 修改应用 1. 创建应用 打开cmd黑框,也可以用下列方法打开项目根目 ...

  8. Django实战(8)——在线人脸识别系统demo(对接Redis、初步实现人脸识别功能)

    接着上一篇Django实战(7)--在线人脸识别系统(第一步.实现图片上传和MySQL数据库的对接,ORM操作数据库)https://blog.csdn.net/qq_41938259/article ...

  9. python django flask_Flask 与 Django 的简单对比

    上一周我学习了 Flask ,这一周我打算做一个 Flask 教程.本文先把 Flask 和 Django 做一个比对,因为我对这两个 Python Web 框架都有实际的开发经验.希望我可以帮助您选 ...

最新文章

  1. [Django学习]第三章 视图和url配置
  2. 行为模式之Template Method模式
  3. IIS6.0打开ASP文件,出现500错误或404错误解决方法
  4. django网上商城_网上商城开源项目合集
  5. 探索发现:平台云——云的新风向
  6. koa2 mongdb 做后端接口的小demo
  7. Windows Forms 实现安全的多线程详解
  8. nginx PHP执行 502 bad gateway 或空白解决笔记
  9. PHP获取数组中重复值的键值
  10. 前阿里P10赵海平被打3.25后离职,加入字节跳动,职级或为4+
  11. php对接抖音小程序担保支付/头条小程序担保支付
  12. lay-ui treeTable无限折叠
  13. 如何自己烧制全文RSS(打造自己RSS源)
  14. String和数据库类型的相互转化
  15. suma服务器 硬盘安装,[Server] HP DL380 G6更新esxi6.0 SATA 硬盘掉线问题
  16. html asterisk 电话,WebGuide: Aplicació Web (HTML5) i Asterisk utilitzant VoIP
  17. 手机腾讯网前端框架MT2.1.0发布
  18. jwt私钥和公钥怎么获取_如何为php-jwt生成密钥对?
  19. Windows开发之——超好用的快速搜索工具
  20. [转]注册给排水工程师考试科目及内容

热门文章

  1. 步骤1:mybatis工程的创建
  2. 2013年工作中用到的10个命令:11-20
  3. 【2013年04月18号】
  4. 关于hibernate注解方法中一对多的级联更新
  5. [简单分页]C#+JQUERY+ORACLE分页效果 ----转载
  6. PyTorch 入坑九:权重初始化
  7. 数据结构笔记(四)-- 静态链表实现
  8. office另存为pdf的加载项_你可能需要用到的office转换技巧
  9. linux定时重启tomcat的脚本,Linux系统中的tomcat定时重启脚本
  10. oracle字段怎么写,oracle修改字段名的语句怎么写_数据库,oracle,字段名