Можно ли избежать многострочного фрагмента в представлении?

Мне нужно создать многострочный фрагмент HTML, который будет экранирован и представлен пользователю.

Это необработанный HTML, который я хочу, чтобы пользователь получил:

<h1>Here is your HTML:</h1>
<div>
  &lt;script&gt;
    alert("Hello world");
  &lt;/script&gt;
</div>

Который будет отображаться как:

Here is your HTML:

<script>
  alert("Hello world");
</script>

Я обнаружил, что запись ${'<script>alert("Hello world");</script>'} в представлении действительно ускользнет от него, но это, похоже, не работает для многострочных строк внутри ${''}$ - я получил следующую ошибку:

expecting anything but ''\n''; got it anyway

Есть ли в настоящее время способ экранировать многострочные строки в представлении? (Без передачи строки из контроллера или чего-то подобного)


person ripper234    schedule 21.11.2011    source источник


Ответы (2)


Лучшим способом может быть использование escape().raw():



    ${ "<script> alert(\"Hello world\"); </script>".escape().raw() }

person emt14    schedule 21.11.2011
comment
Это по-прежнему не поддерживает многострочные шаблоны. - person ripper234; 21.11.2011

Кажется, я пропустил самое очевидное решение: использовать несколько экземпляров ${''}:

<h1>Here is your HTML:</h1>
<div>
<pre>
${'<script>'}
  alert("Hello world");
${'</script>'}
</pre>
</div>
person ripper234    schedule 21.11.2011