Play 2.0模板 - 使用字符串然后将其呈现为HTML

时间:2012-04-07 11:57:44

标签: scala playframework-2.0

在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>

包围

1 个答案:

答案 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>
  }
}