2012-02-09 25 views
3

我在Play应用中制作一个页面,介绍如何制作Play应用页面。 (Very meta:P)如何在模板中转义模板语法

我找不到Play Framework文档中的任何内容,说明如何在模板中逃避Play的模板语法。有谁知道如何做到这一点?

+0

您是否使用Groovy模板或Scala模板?你使用的是Java还是Scala? – Jonas 2012-02-09 23:38:13

+0

如果您使用的是groovy,那么#{verbatim}标签会将其中的所有内容都转义出来 – 2012-02-09 23:57:55

+0

我正在使用Groovy模板,但#{verbatim}不会转义模板标签/表达式。 – 2012-02-10 04:17:44

回答

6

假设您想要将${name}显示为HTML文本,并且不允许播放为变量名称提供值,那么在模板中播放编译$ {“$”}时可以找到问题的答案。

游戏产生一个错误,指出:

illegal string body character after dollar sign; solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" 

这实际上意味着,如果你想显示${name}你应该写下面

${"\${name}"} 

试试这个,它的工作原理!

+0

是的,那是比我自己发布的更正确的答案。谢谢! – 2012-05-24 23:33:01

4

也许不是最优雅的解决方案,但如果您将任何标签中的$替换为ascii转义等价物,那么它就可以工作,例如,如果我想在屏幕上打印$ {user.name},那么文本我将进入将是:

${user.name} 

显然同样适用于该模板语言使用作为触发,如#,@和%

+0

是的,那是有效的。这是一个耻辱,这是必要的,但你是对的 - 这似乎是唯一的解决方案。谢谢! – 2012-02-12 01:46:25

1

想出了一个有趣的解决方案的任何其它特殊字符:

${"#{a @Controller.action()}${user.name}#{/a}"} 

播放会自动将字符串的内容转义为HTML实体。这最终需要更少的额外代码,作为奖励,这意味着我可以将&粘贴模板代码原样复制到页面中。

我希望这对某人有帮助。 :)