在Play 2.0中,使用Scala,我想创建一个带有html片段的工厂,并将每一行放在<div>
块中。我已经尝试了几种我能想到的方法,但它总是出现在String / Html的类型错误或者在页面上写入html代码,就好像它是文本一样。有谁知道怎么做?
更新
我希望看到的是这样的:
@factories.f_div_lines {
<a href="/aabbcc"> abc </a>
<a href="/ccbbdd"> cbd </a>
<a href="/bbddee"> bde </a>
<a href="/ddeeff"> def </a>
<a href="/eeffgg"> efg </a>
}
并且所有<a href>
标记都会被<div>
的
答案 0 :(得分:9)
如果您要将多行字符串拆分为不同的div
,请编写如下模板:
@(message: String)
@for(line <- message.lines) {
<div>@line</div>
}
Play会自动转义HTML内容,因此如果您的message
包含任何内容,则必须通过调用Html
来禁用转义,例如在循环内
<div>@Html(line)</div>
并以这种方式调用它:
Ok(views.html.index("First\nSecond\nThird"))
请参阅迭代
部分的Play guide <强>更新强>
以下代码定义了split_lines_in_divs
,它接受Html
参数,将其转换为String
对象并应用与上述相同的代码。请注意,我使用Play的main
功能,该功能由Play自动生成!当您创建新的Scala项目以提供常见的HTML部分时
@(message: String)
@split_lines_in_divs(the_html: Html) = {
@for(line <- the_html.toString().lines) {
<div>@Html(line)</div>
}
}
@main("The title"){
@split_lines_in_divs {
<a href="test">Test</a>
<a href="test2">Test2</a>
}
}