0

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

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

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

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

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

4

2 回答 2

0

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

于 2012-05-18T08:35:16.733 回答
0

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

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

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

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

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

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

[2] 除外: Java、C# 和 Python 中的StringTemplate包括 JS/Node.js/Java/PHP/Python/Ruby 在内的许多语言中的Mustache

编辑

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

That's why I name my preprocessing classes "Renderers" and my template files "Templates" so Renderers+Templates = Views. Which makes more sense to me as a name and as a philosophy.

I can use money_format/number_format/html_escape etc. within the renderers and then output already rendered data into the templates. Therefore I don't mix rendering/viewing actions with the controller. They all get done in the Renderer.

于 2012-05-18T09:29:07.373 回答