Как избежать синтаксиса шаблона в шаблонах

Я делаю страницу в своем приложении Play, в которой рассказывается о том, как создавать страницы приложения Play. (Очень мета :P)

Я не смог найти ничего в документации Play Framework, объясняющей, как избежать синтаксиса шаблона Play в шаблоне. Кто-нибудь знает как это сделать?


person Will Hains    schedule 09.02.2012    source источник
comment
Используете ли вы шаблоны Groovy или шаблоны Scala? Вы используете Java или Scala?   -  person Jonas    schedule 10.02.2012
comment
если вы используете groovy, то тег #{verbatim} экранирует все внутри него   -  person Gelin Luo    schedule 10.02.2012
comment
Я использую шаблоны Groovy, но #{verbatim} не экранирует теги/выражения шаблона.   -  person Will Hains    schedule 10.02.2012
comment
Я не уверен, что это возможно. Можете ли вы объяснить свой вариант использования, так как может быть обходной путь.   -  person Codemwnci    schedule 10.02.2012
comment
Пример использования: я создаю страницу внешнего вида, чтобы показать членам моей команды, как использовать пользовательские теги и стили в нашем приложении, с рабочими примерами.   -  person Will Hains    schedule 12.02.2012


Ответы (3)


Допустим, вы хотите отображать ${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}"}

Попробуйте это, это работает!

person guy mograbi    schedule 23.05.2012
comment
Да, это более правильный ответ, чем тот, который я написал сам. Спасибо! - person Will Hains; 25.05.2012

Возможно, это не самое элегантное решение, но если вы замените $ в любом из ваших тегов эквивалентом с экранированием ascii, тогда это сработает, например, если я хочу вывести ${user.name} на экран, тогда текст, который я введу, будет быть:

${user.name}

Очевидно, то же самое касается любых других специальных символов, которые язык шаблонов использует в качестве триггера, например, #, @ и %

person grahamrb    schedule 10.02.2012
comment
Да, это работает. Жаль, что это необходимо, но вы правы - это, кажется, единственное решение. Спасибо! - person Will Hains; 12.02.2012

Придумал интересное решение для этого:

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

Play автоматически экранирует содержимое строки в объекты HTML. В конечном итоге это требует меньше дополнительного кода, и в качестве бонуса это означает, что я могу копировать и вставлять код шаблона как есть на страницу.

Я надеюсь, что это полезно для кого-то. :)

person Will Hains    schedule 16.02.2012