程序员人生 网站导航

从Django看CakePHP模板技术的弊端

栏目:CakePHP时间:2014-09-08 22:30:40
作者:老王

CakePHP的模板技术基本上沿用了Rails的方式,也使用了layout技术(链接),子模板的内容会替换layout中的$content_for_layout变量。这样的方式很简单,但它也有很多弊端,比如说title的渲染是由layout中的$title_for_layout变量负责的,通常CakePHP程序员是通过在Controller里使用$this->pageTitle的方式来设置title的,但是因为title的内容会涉及很多显示逻辑(比如为了SEO),所以在Controller里设置title是丑陋的,同样的情况也会出现在诸如meta等情况里。

下面看看Django里的视图技术(链接):

{% extends "base_generic.html" %}
{% block title %}{{ section.title }}{% endblock %}
{% block content %}
<h1>{{ section.title }}</h1>
{% for story in story_list %}
<h2>
<a href="{{ story.get_absolute_url }}">
    {{ story.headline|upper }}
</a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}

Django的模板同样很简单,即使你不了解Django的语法也能大概猜出上面代码的意思。这里extends的作用其实就是layout的作用,在父模板里有若干个block,在子模板里也有若干个block,子模板里的block可以覆盖(也可以不覆盖)父模板里的block,这样,就不会再有上面提到的title,meta等坏味道了。

换个角度看,CakePHP的模板技术算是Django的一个简化版本,如果你想在CakePHP中实现Django的block功能,可以通过自定义helper来实现,但这毕竟不是内核级实现,多少还是有些不爽。
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐