我已经传递了我从控制器传递的标题列表:
@titles:List[String]
我想循环生成一些带有 {mmm} 的 html 标题:
@titles.map { title =>
<h1>{title} {mmm}</h1>
}
显然有一个问题,因为它会尝试找到一个名为 mmm 的变量。如何逃脱括号?
还是有一种更惯用的方式来生成不涉及映射列表的 HTML?对此非常新!
我已经传递了我从控制器传递的标题列表:
@titles:List[String]
我想循环生成一些带有 {mmm} 的 html 标题:
@titles.map { title =>
<h1>{title} {mmm}</h1>
}
显然有一个问题,因为它会尝试找到一个名为 mmm 的变量。如何逃脱括号?
还是有一种更惯用的方式来生成不涉及映射列表的 HTML?对此非常新!
您不需要在 Play 中转义大括号——与 Scala 的 XML 文字不同,它们在 Play 模板中没有任何特殊含义,除了@
.
您应该能够编写以下内容:
@titles.map { title =>
<h1>@{title} {mmm}</h1>
}
并得到<h1>Whatever Title {mmm}</hq>
等。
Travis 的回答展示了一种可能性(对于您所要求的),它是正确的。另一方面,您也可以遇到其他情况,您需要记住其他技巧:
例如,这将失败:
@for(title <- titles){
Title: @title {mmm} <br/>
}
但这会起作用(感谢特拉维斯)
@for(title <- titles) {
Title: @{title} {mmm} <br/>
}
这也将起作用
@for(title <- titles){
Title: @title - <b>something else without bracets</b> <br/>
}
或者,您可以在模型中创建示例toBrackets()
方法并在模板中调用它(Java 示例)
public String toBrackets(String string) {
return "{" + string + "}";
}
在模板中:
@for(title <- titles){
Title: @title @title.toBrackets("mmm") <br/>
}
如果它不是 JS 或其他代码的一部分,并且只是用于呈现在视图中,那么我们可以使用 HTML entitles
{ for left curly brace
} for right curly brace
结果:
{ for left curly brace
} for right curly brace
您可以创建变量@LeftBracket
={
和@RightBracket
= }
,然后这应该可以工作:
@titles.map { title =>
<h1>{title} @{LeftBracket}mmm@RightBracket</h1>
}
与您的问题有些相关的旁注:
我的印象是,除非括号匹配(即}
每个都匹配一个{
),否则
模板编译会失败,所以也许@RightBracket
是插入单个}
? 如果您需要编写以下代码,这将很有用:
@titles.map { title =>
hello :-}
}
:-}