在学习Django模板之前我以为也和很多php模板引擎一样,是通过缓存文件输出,执行模板中的python代码来实现的。读完发现居然和前端模板相似,用了正则。 为了更好的体会设计的哲学,我同时参考了tornato、drupal、codeigniter、aceTemplate、underscore中的模
在学习Django模板之前我以为也和很多php模板引擎一样,是通过缓存文件输出,执行模板中的python代码来实现的。读完发现居然和前端模板相似,用了正则。
为了更好的体会设计的哲学,我同时参考了tornato、drupal、codeigniter、aceTemplate、underscore中的模板设计。
Django的模板设计时有个重要的假设是:“写模板的不懂python”。因此你只要搞告诉他基本的逻辑结构(判断、循环、输出变量等)的写法就行了。同时也避免了程序员将业务逻辑写道模板里。解析模板的时候和前端模板非常类似,也是用正则提取除所有的代码部分,然后顺序解析(解析的时候根据实际情况构造作用域)成html。
php中模板实现得比较简单,主要是通过缓冲输出流来实现的。模板中使用的就是正常的php代码。这主要也是因为php文件把不在php标记中的文本都直接输出的特性。所以php的模板就本上都是能直接执行php代码的。
这里可以看出两种完全不同的设计思路,Django是主动对模板使用者设限,想当于自己实现了一个小的模板语言。而tornato、php模板和前端模板则是让尽量让开发者减少学习成本,同时获得极大的自由。不过前端模板让开发者获得极大自由的主要原因是html和前端逻辑几乎都是统一个人写的。
2.支持模板嵌套
3.支持模板继承
以下几点是我觉得有意思的:
1. 无论哪种模板实现,其实本身和html没有一毛钱关系。
2. 要论速度,肯定是像php这种直接缓存输出流的最快。毕竟省了模板编译这一步。tornato生成python语句之后如果也是封装成函数,那么应该是可以缓存的,没有考证。
3. Django模板实现的方式也许和整个框架的设计理念是相关的,我还没有看完,不妄下评论。不过至少在书里面说起清楚了为什么这么做。
刚开始学python和Django,有写的不对的地方感谢读者指正。