Play Framework 2 模板语言非常好。然而,尽管它受到 Microsoft 的 Razor 语言的“启发”,但一个重要的设计决策却有所不同:如何“转义”为 HTML。Razor 查找 HTML 样式的标签,而 Play 2 使用某种启发式方法。
我正在尝试编写一个模板,该模板采用 HTML 的多个“部分”,并生成一个带有标题和目录的页面。我的 'structuredpage.scala.html' 看起来像这样:
@(title: String)(sections: Pair[String,Html]*)
@main(title){
<nav class="page-links">
@makeTableOfContents(sections)
</nav>
@for(section <- sections){
<section id="@section._1">
<h2>@section._1</h2>
@section._2
</section>
}
}
请注意,它的第二个参数是可变数量的部分。在 Play 模板语言中似乎没有办法调用它。
我创建了一个名为的辅助函数Common.section
,如下所示:
def section(title: String)(content: Html) = title -> content;
我试过这个:
@()
@import views.Common.section
@structuredpage("Dashboard")(
section("Latest Requests") {
<p>Blah</p>
},
section("Your Details") {
<p>Blah blah</p>
}
)
…type mismatch; found : scala.xml.Elem required: play.api.templates.Html
在第 5 行给出,<p>Blah</p>
即被解释为 Scala,而不是模板文档 HTML。
还有这个:
@()
@import views.Common.section
@structuredpage("Dashboard"){
@section("Latest Requests") {
<p>Blah</p>
},
@section("Your Details") {
<p>Blah blah</p>
}
}
…type mismatch; found : play.api.templates.Html required: (String, play.api.templates.Html)
在第 3 行给出,即整个外花括号块被解释为模板文档 HTML,而不是Scala 代码!
令人沮丧的是,它们似乎与 Play 2 官方文档中的一些代码示例没有太大不同,例如:http ://www.playframework.org/documentation/2.0/ScalaTemplateUseCases
有任何想法吗?我正在使用 Play Framework 2.0.4