我在模板中有这个可重复使用的代码,它运行正常。
@headers(page: String,site:Site, user: User) = @{
page match {
case "home" => Map(
"title" -> "Welcome",
"description" -> "Welcome to our site")
case "profile" => Map(
"title" -> user.name + "-" site.name,
"description" -> "Hello" + user.name)
}
}
现在我想将它移到单独的模板并将其包含在主模板中。 如果我把它放在像这样的单独文件中
@(page: String,site:Site, user: User) = page match {
case "home" => Map(
"title" -> "Welcome",
"description" -> "Welcome to our site")
case "profile" => Map(
"title" -> user.name + "-" site.name,
"description" -> "Hello" + user.name)
}
当我尝试从主模板
中获取数据时@templates.layout_headers("home", user, site)("title") I've got error
不接受参数 抱怨
("title")
一部分。如何解决这个问题?
答案 0 :(得分:1)
您的模板不接受title参数。您可以将旋转模板视为普通的scala函数。包含签名layout_header.scala.html
的名为@(page: String, site:Site, user: User)
的模板等同于
def layout_header(page: String, site: Site, user: User): play.twirl.api.HtmlFormat.Appendable
现在你试图将这个函数称为layout_headers(user, site)("title")
,这显然是错误的,因为有两点。首先缺少参数page
。其次,该函数不接受title
参数。
由于您未在title
中使用layout_headers
,只需将其从通话中删除并添加page
参数:
@templates.layout_headers(page, user, site)
如果模板中需要title
,请将其添加到签名中:
@(page: String, site:Site, user: User, title: String) = page match {
...
}
然后将被称为
@templates.layout_headers(page, user, site, "Some title")