Как я могу получить некоторые строковые значения из контроллера Pylons для назначения переменных JavaScript с помощью Mako? - PullRequest
3 голосов
/ 01 августа 2010

Я разрабатываю под Pylons, используя шаблоны Mako. Проблема заключается в том, что мне нужно назначить строку из некоторого атрибута tmpl_context переменной JavaScript в теле страницы. Дополнительная проблема заключается в том, что эта строка может быть совершенно произвольной, то есть может содержать такие символы, как ", ', <,> и т. Д. ... Есть ли общий способ сделать такое назначение? Я пробовал что-то вроде:

<script>
    ...
    var a = "${c.my_string}";
    ...
</script>

но я получаю кавычки и специальные символы HTML. Но я не хотел бы отключать фильтрацию из-за возможной опасности выполнения неожиданного кода.

Ответы [ 2 ]

2 голосов
/ 01 августа 2010

У вас есть несколько произвольных данных в c.my_string, и поэтому вы не хотите использовать "| n", верно?

Самый быстрый способ избежать этого в JS-стиле - это

var a = ${c.my_string.__repr__()|n}; # Note lack of "" around it! 

Однако я не уверен насчет <> символов (с добавлением чего-то вроде </script>), может быть, вы также захотите использовать .replace('<', '&lt;');

Для юникода вам также понадобится убрать символ 'u' с начала строки.

1 голос
/ 01 августа 2010

если я понял, что вы хотите, попробуйте webhelpers.html.literal:

помощник:

from webhelpers.html import literal

HTML:

<script>
    document.write('${h.literal(c.my_string)}');
</script>

это лучше чем ${c.mystring|n} экранирование html

...