2011-12-30 2 views
17

Этот вопрос должен быть очевиден, но я не могу понять это.Как передать переменные контекста в файл javascript в Django?

В шаблоне я ссылаюсь на файл js в своем медиа-каталоге. Из этого файла я хотел бы получить доступ к переменной контекста, например {{my_chart}}.

Но синтаксис отличается ?? Спасибо!!

+0

Возможного дубликата [Django шаблон Переменные и Javascript ] (http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) – Cory

ответ

16

Я не думаю, что так возможно. Если вы хотите получить доступ к некоторым данным, предоставленным представлением, вы должны передать его функции js.

Пример

расслоение плотной файла:

my_cool_js_function(some_param){ 
    // do some cool stuff 
} 

вид

// some html code 

my_cool_js_function({{param}}) 

надеюсь, что это помогает :)

+0

Не забудьте взглянуть на [{{значение | escapejs}}] (https://docs.djangoproject.com/en/dev/ref/templates/builtins/# escapejs) – danihp

15

В дополнение к ответу Анджея байбак, вы также можете создать глобальную переменную в Javascript из вашего шаблона. Например, ваш шаблон может генерировать подобный код:

<script> 
    var my_chart = {{ the_chart }}; 
</script> 

Ваш сценарий может затем обратиться к my_chart.

+0

@Brian_Neal, как это работает? I.e., вы можете просто сделать что-то вроде 'console.log (my_chart);' в файле javascript, и вам не нужно объявлять его где-нибудь? – YPCrumble

+0

@YPCrumble Он объявлен в html, который генерируется Django. Если тот же html-файл также содержит внешний файл javascript, этот javascript может ссылаться на эту переменную. –

+1

Это блестящий ответ, если вы объявляете глобальную переменную, прежде чем импортировать файл js, вы должны быть в порядке. Благодарю. –

3

Я хотел бы также добавить, потому что я столкнулся с ошибкой в ​​несколько раз, что если переменная питон объект будет бросать синтаксическую ошибку, если не поставить его в кавычки, другими словами, в шаблоне,

<script> 
    var my_var = '{{ python_object|escapejs }}'; 
</script> 

Кроме того, прежде чем помещать этот объект в контекст, лучше сначала его сериализовать в JSON, иначе вам придется выполнять синтаксический анализ строк. Я также обнаружил, что объекты даты должны быть преобразованы в строки перед этим шагом.

import jsonpickle 

context['python_object'] = jsonpickle.encode(python_object) 

И, наконец, в JS вы можете перебирать объект правильно и использовать значение, как вы, вероятно, будете иметь в питоне, выполнив:

var my_var_parsed = jQuery.parseJSON(my_var); 
Смежные вопросы