2013-04-18 5 views
5

Мне нужно напечатать некоторый необработанный HTML в шаблоне Scala, используя новейшие Play Framework 2.1.1 Сообщения, переменные, простые для циклов и т. Д. Все работает нормально. Но что, если мне нужно сделать некоторую логику и распечатать необработанный HTML-код в шаблоне?Печать HTML в шаблоне Scala

@{ 
    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 в качестве переменной шаблона в начале).

Какое решение?

ответ

14

Но что делать, если мне нужно сделать некоторую логику и распечатать необработанный HTML-код в шаблоне?

Play Framework, как и другие структуры MVC, рекомендует строгое разделение проблем. Ваша логика должна быть в вашем контроллере, а не в представлении. Вот почему это довольно сложно сделать в шаблонах scala.

Кроме того, вы можете использовать @Html() для отображения неизменяемых переменных.

+0

правильный ответ, но избегайте использования '@Html()' из-за проблем с безопасностью. – adis

+0

@adis Не могли бы вы указать проблемы безопасности @Html()? – user1943442

+0

@ user1943442 сценарий инъекции, если вы просто используете '@ Html' вне пользовательского ввода. Читайте еще несколько: http://wonko.com/post/html-escaping – adis