Вы можете использовать массив JSON, как предложил Самет, или даже просто обычные переменные JS.
<script type='text/javascript'>
some_numeric_property = {{variable1}};
some_string_property = '{{variable2}}';
</script>
Другой способ сделать это (как я обычно это делаю) - передать все детали, которые вынужно через вызовы функций и data-
атрибуты.Например, если бы я хотел, чтобы определенная ссылка открывала всплывающий пузырь AJAX с профилем пользователя при наведении, я мог бы сделать это:
<a href='/profile/{{user.id}}' onmouseover='show_user_popup({{user_id}})'>{{user.name}}</a>
или это (при условии, что мой сценарий прикреплял события к ссылкам с классами user-link
):
<a href='/profile/{{user.id}}' class='user-link' data-uid='{{user_id}}'>{{user.name}}</a>
Вы также можете вызывать эти функции в head
вашего HTML-кода сразу после загрузки, если хотите.
<script type='text/javascript' src='{{MEDIA_URL}}/js/whatever.js'></script>
<script type='text/javascript'>
do_something_with_a_number({{variable1}});
do_something_with_a_string('{{variable2}}');
</script>
Преимущество последнего состоит в том, чтопоскольку при загрузке файла JS код не выполняется (за исключением создания и связывания объектов function
, очевидно), вы можете включить один файл JS на каждую страницу вашего сайта и просто вызывать нужные биты насоответствующие страницы.Этот один файл затем кэшируется после первой загрузки (при условии, что вы отправляете правильные заголовки), уменьшая время загрузки для последующих страниц.
РЕДАКТИРОВАТЬ: соображения безопасности: Метод I 'В описанном (наряду со многими другими методами на этой странице) предложено вставить данные в виде а) атрибутов тегов HTML или б) объектов JavaScript.Это безопасно, если вы знаете, что данные a) не могут быть установлены ненадежными пользователями или b) всегда в «безопасном» формате (т. Е. Данные поступают из SlugField
или IntegerField
или чего-то другого вбазы данных).
Однако, если ни один из этих случаев не подходит, вам нужно будет защитить от внедрения HTML и / или JS, экранируя соответствующие символы.Поведение Django по умолчанию для экранирования сущностей HTML может в некоторых случаях защитить вас, но не может, поэтому стоит проверить.