我寻找具有特殊概念的模板引擎



请您向我推荐一个HTML模板引擎(任何脚本语言(,它实现了下面描述的特殊概念。

所有标记都处于活动状态。在调用模板之前不应该准备数据,但模板本身从 Model 获取数据。例如

{CurrentUser.name} 将被替换为当前登录用户的名称,因此在调用模板之前我不需要在准备数据。

但我也可以指定一些"自定义"数据方法。例如,如果我必须制作照片库,并且只需要显示一大块照片,我可以使用{PhotosListPart.thumb.url}并定义检索PhotosListPart的特殊方法,允许模板自动调用它并异步获取数据。

你知道任何支持这种模板方法的模板引擎/框架吗?

拉取视图是从控制器拉取数据的视图(控制器反过来调用模型来查找数据(。

如果你严格遵守MVC模式[1],那么你就不会使用任何类型的拉取视图。

但是AFAIK没有[2]的模板引擎会回复MVC,因为它们允许模板中的逻辑(if/foreach/函数调用等(。

没有模板引擎

会预先编写假设存在任何数据的代码,但几乎所有模板引擎都允许您传递一个庞大的数据数组,其中包含页面上绝对需要的所有内容。

如果你需要一个模板引擎,将数据

预填充到变量中,那不是模板引擎,它是一个完整的应用程序,它包含与数据库或模型通信的逻辑,这使得它远离模板引擎的概念。

[1] 当我们谈论模板引擎时,尊重 MVC 意味着使用 if 只是为了检查是否设置了变量,for/foreach 循环不应该存在,通过将模板应用于集合对象来完成对项目集/列表的范围,这和其他问题如下所示: http://bit.ly/Jc3f0Z

[2] 除了:Java、C# 和 Python 中的 StringTemplate;Moustache 使用了很多语言,包括 JS/Node.js/Java/PHP/Python/Ruby。

编辑

使用 View 类来准备数据,使用模板文件来输出它们对我来说总是像笨拙一样缝合,因为名称变得混乱(视图是类 + 模板,模板是文件(。

这就是为什么我将预处理类命名为"渲染器",将模板文件命名为"模板",因此渲染器+模板=视图。这对我来说更有意义,作为一个名字和一个哲学。

我可以在渲染器中使用 money_format/number_format/html_escape 等,然后将已经渲染的数据输出到模板中。因此,我不会将渲染/查看操作与控制器混合使用。它们都在渲染器中完成。

是的,我了解 MVC 唯一的设计模式,但我无法想象您希望如何实现 url 路由并从中调用模板。例如,您收到来自用户的请求,并且需要显示一些数据,如果您删除视图,则所有业务逻辑都应位于模型或模板或其他地方,例如助手,因此事实证明MVC但是视图要涂抹在三个或更多地方。但是如果你真的想这样做,你可以尝试使用 Mako 模板 http://www.makotemplates.org/有了它,你可以根据需要直接在模板中编写 python 代码((

最新更新