我有一个像这样的Scala模板......
@()
import view.html.partials._header
import view.html.partials._footer
<!DOCTYPE html>
<html lang="en">
@_header()
/* Body of web page */
@_footer
</html>
每个页面都有相同的页眉和页脚以及不同的正文。我不想这样做......
Page#1 ...
@()
import view.html.partials._header
import view.html.partials._footer
import view.html.partials._body1
<!DOCTYPE html>
<html lang="en">
@_header()
@_body1()
@_footer
</html>
Page#2 ...
@()
import view.html.partials._header
import view.html.partials._footer
import view.html.partials._body2
<!DOCTYPE html>
<html lang="en">
@_header()
@_body2()
@_footer
</html>
第3页......
@()
import view.html.partials._header
import view.html.partials._footer
import view.html.partials._body3
<!DOCTYPE html>
<html lang="en">
@_header()
@_body3()
@_footer
</html>
等
有没有办法传递要作为参数呈现的部分模板的名称?这个问题的解决方案是什么?
P.S。我没有在...... the play template documentation
中看到解决方案答案 0 :(得分:2)
您可以创建一个main.scala.html
文件作为默认布局,而不是完成所有这些重复:
@(title: String)(content: Html)
@import view.html.partials._header
@import view.html.partials._footer
<!DOCTYPE html>
<html lang="en">
@_header()
<body>
@content
@_footer()
</body>
</html>
第一行确切地说#34;这个视图将收到一个标题参数,还有一个HTML&#34;。从那以后,您可以执行以下操作:
页面#1:
@(someParameter: String)
@main("The title of Page #1") {
<h1>Hello, I'm the body of Page #1</h1>
<p>As you can see, I'm calling the main view passing
a title and a block of HTML</p>
}
第2页:
@(someParameter: String, anotherParameter: Long)
@main("This time Page #2") {
<h1>Hello, I'm the body of Page #2</h1>
<p>Just like Page #1, I'm passing a title
and a block of HTML to the main view.</p>
}
这些都在文档中解释,但在另一页中解释:
https://www.playframework.com/documentation/2.0/ScalaTemplateUseCases
答案 1 :(得分:-1)
制作像这样的开关或案例陈述......
@(bodyCase: ClosedEnumType)
import view.html.partials._header
import view.html.partials._footer
import view.html.partials._body1
import view.html.partials._body2
<!DOCTYPE html>
<html lang="en">
@_header()
@bodyCase match {
case Body1() => {
@_body1()
}
case Body2() => {
@_body2()
}
}
@_footer
</html>