Play Framework 2.3 pass/inject 模板作为控制器级别其他模板的参数

Play Framework 2.3 pass/inject templates as parameters of other templates in the controller level

是否可以在控制器级别将模板注入到 Play Framework 中的其他模板中?

我有:

Ok(views.html.staticpages.index("Your new application is ready.")(views.html.shared.header.unauthenticatedheader()))

但它给了我错误:

类型不匹配,预期 Html,实际任何

当尝试将 views.html.shared.header.unauthenticated 传递给 [...].index 时,index 收到 header: Html 作为第二个参数,当将模板传递给另一个模板时在模板级别,传递 Html 类型是正常的,但是是否可以将 header.unauthenticated 转换为 Html 类型?

这些是我的模板的 header:

header.unathenticatedheader:

@()(implicit request: common.request.CanBeAuthenticatedRequest[_])

staticpages.index:

@import common.request.CanBeAuthenticatedRequest

@(title: String = "Welcome to Play")(header: Html)(implicit request: CanBeAuthenticatedRequest[_])

这里有几个选择。可以传入渲染结果,也可以传入模板,让它自己在模板内渲染。

如果您需要将参数传递到模板中,您可能会更好地传递结果;如果你传入无参数模板,这是个人喜好。

传入结果

模板:

@(message: String)(myInsert: Html)

<div>start: @message</div>
<div> @myInsert </div>
<div>end</div>

控制器:

def index = Action {
  Ok(views.html.index("foo")(views.html.insert()))
}

传入模板

模板:

@(message: String)(myInsert: Template0[play.twirl.api.HtmlFormat.Appendable])

<div>start @message</div>
<div> @myInsert.render() </div>
<div>end</div>

控制器:

def index = Action {
  Ok(views.html.index2("sdf sdf d")(views.html.insert2))
}