我已经通过了我从控制器传递的标题列表:
@titles:List[String]
我想循环生成一些html标题,其中{mmm}出现在:
之后@titles.map { title =>
<h1>{title} {mmm}</h1>
}
显然有一个问题,因为它会尝试找到一个名为mmm的变量。如何逃避括号?
或者是否有更惯用的方法来生成不涉及映射列表的HTML?对此非常陌生!
答案 0 :(得分:4)
你不需要在Play中转义大括号 - 与Scala的XML文字不同,除了@
之外,它们在Play模板中没有任何特殊含义。
您应该能够写下以下内容:
@titles.map { title =>
<h1>@{title} {mmm}</h1>
}
获取<h1>Whatever Title {mmm}</hq>
等等。
答案 1 :(得分:3)
特拉维斯的答案证明了一种可能性(因为你要求)并且这是正确的。另一方面,你也可以遇到其他情况,你需要记住其他技巧:
例如将失败:
@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/>
}
答案 2 :(得分:3)
如果它不是JS或其他代码的一部分,并且仅用于呈现在视图中,那么我们可以使用HTML权利
{ for left curly brace
} for right curly brace
结果:
{ for left curly brace
} for right curly brace
答案 3 :(得分:1)
您可以创建变量@LeftBracket
= {
和@RightBracket
= }
,然后这应该有效:
@titles.map { title =>
<h1>{title} @{LeftBracket}mmm@RightBracket</h1>
}
与您的问题有些相关的旁注:
我的印象是,除非括号匹配(即每个}
{
),否
模板编译失败,所以也许@RightBracket
是插入单个}
的唯一方法?这在你需要写的时候很有用:
@titles.map { title =>
hello :-}
}
: - }