动态地在Scalate模板中包含变量

时间:2012-12-18 19:51:09

标签: scala scalate scaml

我正在使用Scalate(特别是scaml,但格式有些不重要),并且我有许多在多个模板中定义的值。 这些变量在编译时并不总是已知。我的目标是在单个共享模板中定义它们,我将其作为其他模板的一部分包含在内(一种模板继承)。我也希望这些值被懒惰地实例化。所以我想要的是这样的:

globals.scaml:

- import mylib.DataProvider._

- lazy val name = get("name")
- lazy val address = get("address)

template.scaml:

= include("globals.scaml")
The address for #{name} is #{address}

我已经搞砸了各种方案,包括将其反转,以便globals.scaml在传递一些变量时加载正确的模板,如下所示:

globals.scaml:

-@ val template: String
- import mylib.DataProvider._

- val data = Map("name" -> get("name"), "address" -> get("address))
- render(template, data)

但这只有在我真正在模板中声明val时才有效,如下所示:

-@ val name:String
-@ val address:String

The address for #{name} is #{address}

问题是这实际上比在每个模板中重复自己更糟糕,因为我仍然需要声明所有的val并且我没有得到懒惰的评估。

有没有办法(没有编写我自己的预解析器)在Scalate中执行此操作?

0 个答案:

没有答案