var userName = {{name}}
Выходит, когда вы просматриваете исходный код HTML как:
var userName = Bob
Что является очевидной ошибкой: пропущенные кавычки. Но, просто заключив в кавычки:
var userName = '{{name}}';
недостаточно для общего случая. Что если строка содержит символ кавычки, обратную косую черту или символ новой строки? В лучшем случае ваше приложение падает. В худшем случае, дыра в безопасности между сайтами. Более того, символ &
или <
в имени также не будет отображаться должным образом, так как Django autoescape, вероятно, предположит, что он находится в не-CDATA HTML-контексте, и неуместно и -escape их.
Вместо этого используйте фильтр escapejs
:
var userName = '{{name|escapejs}}';
В качестве альтернативы используйте кодировщик JSON для преобразования любого базового типа данных в буквальный формат JavaScript, а не просто в строку. В стандартной библиотеке 2.6 имеется json , но учтите, что в строках не должно быть символа <
, поэтому для внедрения кода в элемент скрипта вам нужно будет экранировать его вручную, чтобы предотвратить </script>
последовательность, заканчивающая элемент CDATA преждевременно.