擅长:python、mysql、java
<p>Pull视图是从控制器中拉出数据的视图(控制器反过来调用模型来查找数据)。你知道吗</p>
<p>如果您严格遵守MVC模式[1],那么就不会使用任何类型的<em>pull</em>视图。你知道吗</p>
<p>但是没有一个[2]的模板引擎能够代表MVC,因为它们允许模板中的逻辑(if/foreach/function调用等)。你知道吗</p>
<p>任何模板引擎都不会有预先编写的代码来假设存在任何数据,但是几乎所有的模板引擎都允许您传递一个<em>庞大的</em>数据数组,其中包含页面上所需的所有内容。你知道吗</p>
<p>如果您需要一个<em>模板引擎</em>将数据预先填充到变量中,那不是一个模板引擎,而是一个完整的应用程序,它包含与数据库或模型通信的逻辑,这使它远离了模板引擎的概念。你知道吗</p>
<p>[1]当我们谈论模板化引擎时,尊重MVC意味着使用<em>if</em>仅检查变量<em>是否设置</em>,for/foreach循环不应存在,通过将模板应用于集合对象来完成对集合/项目列表的范围,这一点和其他关注点如下所示:<a href="http://bit.ly/Jc3f0Z" rel="nofollow">http://bit.ly/Jc3f0Z</a></p>
<p>[2]除了Java中的<strong>StringTemplate</strong>之外,C&Python;<strong>Moustache</strong>在很多语言中,包括JS/Node.js/Java/PHP/Python/Ruby. 你知道吗</p>
<h2>编辑</h2>
<p>使用视图类来准备数据,使用模板文件来输出数据,对我来说总是像一堆乱七八糟的东西,因为名称变得混乱(视图是类+模板,模板是文件)。你知道吗</p>
<p>这就是为什么我将预处理类命名为“Renderers”,将模板文件命名为“Templates”,这样Renderers+Templates=Views。作为一个名字和一种哲学,这对我来说更有意义。你知道吗</p>
<p>我可以在渲染器中使用money\u format/number\u format/html\u escape等,然后将已经渲染的数据输出到模板中。因此,我不会将渲染/查看操作与控制器混合使用。它们都在渲染器中完成。你知道吗</p>