在scala代码中调用Twirl模板

时间:2016-07-21 14:42:38

标签: scala templates playframework-2.0 twirl

我有一个Play Scala 2.5应用程序。我想知道如何从scala代码返回另一个Twirl模板中的Twirl模板(如果可能的话)。

示例:我有几个与html输入元素对应的Twirl模板。输入文本的一个模板,输入复选框的另一个模板,等等。 我有一个主模板,在内部我从Scala对象或类调用一个辅助方法,并根据某些条件我返回所需输入元素的Twirl模板。

1 个答案:

答案 0 :(得分:1)

在这个答案中,我想你的模板具有相同的输入参数和输出类型(HTML)。 Play docs表示模板已编译为普通的Scala函数。

例如,假设您有两个模板, template1 template2 ,它们都有输入参数a: String main 模板应该使用这两者中的任何一个,因此它的参数为template: String => HtmlFormat.Appendable

<强>模板1

@(a: String)
@{ a + " world!" }

<强>模板2

@(a: String)
@{ a + " Stackoverflow!" }

主要

@(template: String => HtmlFormat.Appendable)
@template("Hello")

如果我们传递 template1 ,我们得到了#Hello; Hello world!&#34;,如果我们传递 template2 ,我们得到&#34; Hello Stackoverflow!& #34;

现在,您可以定义方法 getTemplate来获取所需的模板:

val t1 = views.html.template1.apply _
val t2 = views.html.template2.apply _

def getTemplate(param: Int) = if(param == 1) t1 else t2

最后是Application 控制器方法:

def showTemplate(param: Int) = Action {
  val template = getTemplate(param)
  Ok(views.html.mainTemplate(template))
}

路线,当然:

GET     /template/:id               controllers.Application.showTemplate(id: Int)