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中定义:
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的模板系统相关推荐
- asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...
http://blog.chedushi.com/archives/910 结论: 点评一下吧.django就是个渣,不多废话了.webpy的代码很简洁,可惜速度太慢了.bottle看起来快一点,不过 ...
- 《Django实战系列》
这个实战系列暂时就告一段落了,时间和能力的关系,有些地方写的不够清楚明白,代码也没有整理出来.未尽事宜将在以后逐步补全. 希望通过这个系列,你能够掌握使用Django开发一个web应用的基本过程.现在 ...
- Django实战—— Web可视化漏洞扫描器
QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群6493473 ...
- django debug=false后静态文件丢失_python框架Django实战商城项目之工程搭建
项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...
- python开发商城实战_python框架Django实战商城项目之工程搭建
项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...
- Django实战技巧(2)-git代码仓分支管理技巧
Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...
- 【Youtobe trydjango】Django2.2教程和React实战系列四【创建Django应用】
[Youtobe trydjango]Django2.2教程和React实战系列四[创建Django应用] 1. 创建应用 2. 修改应用 1. 创建应用 打开cmd黑框,也可以用下列方法打开项目根目 ...
- Django实战(8)——在线人脸识别系统demo(对接Redis、初步实现人脸识别功能)
接着上一篇Django实战(7)--在线人脸识别系统(第一步.实现图片上传和MySQL数据库的对接,ORM操作数据库)https://blog.csdn.net/qq_41938259/article ...
- python django flask_Flask 与 Django 的简单对比
上一周我学习了 Flask ,这一周我打算做一个 Flask 教程.本文先把 Flask 和 Django 做一个比对,因为我对这两个 Python Web 框架都有实际的开发经验.希望我可以帮助您选 ...
最新文章
- [Django学习]第三章 视图和url配置
- 行为模式之Template Method模式
- IIS6.0打开ASP文件,出现500错误或404错误解决方法
- django网上商城_网上商城开源项目合集
- 探索发现:平台云——云的新风向
- koa2 mongdb 做后端接口的小demo
- Windows Forms 实现安全的多线程详解
- nginx PHP执行 502 bad gateway 或空白解决笔记
- PHP获取数组中重复值的键值
- 前阿里P10赵海平被打3.25后离职,加入字节跳动,职级或为4+
- php对接抖音小程序担保支付/头条小程序担保支付
- lay-ui treeTable无限折叠
- 如何自己烧制全文RSS(打造自己RSS源)
- String和数据库类型的相互转化
- suma服务器 硬盘安装,[Server] HP DL380 G6更新esxi6.0 SATA 硬盘掉线问题
- html asterisk 电话,WebGuide: Aplicació Web (HTML5) i Asterisk utilitzant VoIP
- 手机腾讯网前端框架MT2.1.0发布
- jwt私钥和公钥怎么获取_如何为php-jwt生成密钥对?
- Windows开发之——超好用的快速搜索工具
- [转]注册给排水工程师考试科目及内容
热门文章
- 步骤1:mybatis工程的创建
- 2013年工作中用到的10个命令:11-20
- 【2013年04月18号】
- 关于hibernate注解方法中一对多的级联更新
- [简单分页]C#+JQUERY+ORACLE分页效果 ----转载
- PyTorch 入坑九:权重初始化
- 数据结构笔记(四)-- 静态链表实现
- office另存为pdf的加载项_你可能需要用到的office转换技巧
- linux定时重启tomcat的脚本,Linux系统中的tomcat定时重启脚本
- oracle字段怎么写,oracle修改字段名的语句怎么写_数据库,oracle,字段名