在Scala模板中打印HTML

时间:2013-04-18 20:02:57

标签: 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
}

在这种情况下,@{}函数会返回output,但HTML会被转义,而且不太实际(在返回之前将所有内容合并到单个output变量中)。

如果我提出类似

的内容
for(court <- courts) {
    println("<p>SomeComplexString</p>")
}

它不起作用(我没有得到任何编译错误,但输出中没有任何内容)。

我能做到

@for(court <- courts) {
    <p>SomeComplexString</p>
}

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

解决方案是什么?

1 个答案:

答案 0 :(得分:15)

  

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

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

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