0

在使用 Scala 的 Play 2.0 中,我想创建一个工厂,它接受一个 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>'s包围

4

1 回答 1

9

如果您的意思是将多行字符串拆分为不同div的 s,请编写如下模板:

@(message: String)

@for(line <- message.lines) {
  <div>@line</div>
}

Play 会自动转义 HTML 内容,因此如果您message包含任何内容,则必须通过调用来禁用转义Html,例如在循环中

<div>@Html(line)</div>

并以这种方式调用它:

Ok(views.html.index("First\nSecond\nThird"))

请参阅迭代部分的播放指南

更新 以下代码定义了split_lines_in_divs哪个接受Html参数,将其转换为String对象并应用与上面相同的代码。请注意,我使用了 Playmain自动生成的 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>
  }
}
于 2012-04-07T12:55:10.403 回答