在 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 函数。
例如,假设您有两个模板,template1 和 template2,它们都有输入参数 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)
我有一个 Play Scala 2.5 应用程序。我想知道如何 return 在 scala 代码的另一个 Twirl 模板中旋转模板(如果可能的话)。
示例:我有几个对应于 html 输入元素的 Twirl 模板。一个用于输入文本的模板,另一个用于输入复选框的模板等等。 我有一个主模板,在内部我从 Scala 对象或 class 调用辅助方法,并根据某些条件 return 所需输入元素的 Twirl 模板。
在这个答案中,我假设您的模板具有相同的输入参数和输出类型 (HTML)。 Play docs 说模板被编译为普通的 Scala 函数。
例如,假设您有两个模板,template1 和 template2,它们都有输入参数 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)