2012-02-09 29 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實體。這最終需要更少的額外代碼,作爲獎勵,這意味着我可以將&粘貼模板代碼原樣複製到頁面中。

我希望這對某人有幫助。 :)