在 scala 代码中调用 Twirl 模板

Call Twirl template in scala code

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

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

在这个答案中,我假设您的模板具有相同的输入参数和输出类型 (HTML)。 Play docs 说模板被编译为普通的 Scala 函数。

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

模板1:

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

模板2:

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

主要:

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

如果我们传递 template1,我们得到 "Hello world!",如果我们传递 template2,我们得到 "Hello Whosebug!"。

现在,您可以定义一个方法 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)