在Scala模板中打印HTML

sve*_*ija 6 playframework-2.0 scala-template

我需要使用最新的Play Framework 2.1.1消息,变量,简单的循环等在Scala模板中打印一些原始HTML .一切正常.但是如果我需要做一些逻辑并将原始HTML打印到模板中呢?

@{
    val courts = venue.getCourts()
    val totalWidth : Int = 920
    .. some other initialization variables/values

    var output : String = ""
    for(court <- courts) {
        output += "<p>SomeComplexString</p>"
    }

    output
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,@{}函数返回output但HTML被转义,并且它不那么实用(output在返回之前将所有内容组合成单个变量).

如果我把类似的东西

for(court <- courts) {
    println("<p>SomeComplexString</p>")
}
Run Code Online (Sandbox Code Playgroud)

它没有工作(我没有得到任何编译错误,但输出没有任何东西).

我可以

@for(court <- courts) {
    <p>SomeComplexString</p>
}
Run Code Online (Sandbox Code Playgroud)

但后来courts会超出范围(我只能说我不能courts在开头定义为模板变量).

解决办法是什么?

Jul*_*ont 15

但是如果我需要做一些逻辑并将原始HTML打印到模板中呢?

与其他MVC框架一样,Play Framework建议严格区分关注点.您的逻辑必须在您的控制器中,而不是在视图中.这就是为什么在scala模板中执行此操作相对复杂的原因.

此外,您可以使用@Html()来显示未转义的变量.