2011-12-30 28 views
17

這個問題一定很明顯,但我無法弄清楚。如何將我的上下文變量傳遞給Django中的JavaScript文件?

在模板中,我鏈接到我的媒體目錄中的js文件。從該文件中,我想訪問像{{my_chart}}這樣的上下文變量。

但語法不同?謝謝!!

+0

可能重複的[Django的模板變量和Javascript ](http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) – Cory 2017-01-17 04:10:43

回答

16

我不認爲這是可能的。如果你想訪問視圖提供的一些數據,你必須將它傳遞給js函數。

js文件:

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

視圖

// some html code 

my_cool_js_function({{param}}) 

希望這有助於:)

+0

請記住看看[{{value | escapejs}}](https://docs.djangoproject.com/en/dev/ref/templates/builtins /#escapejs) – danihp 2011-12-30 21:00:45

15

除了安傑Bobak的回答,您還可以生成一個全局變量在您的模板的Javascript中。例如,您的模板可能是這樣生成代碼:然後

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

您的腳本可以參考my_chart

+0

@Brian_Neal這是如何工作的?也就是說,你可以在javascript文件中做一些像'console.log(my_chart);'這樣的東西,而不必在任何地方聲明它? – YPCrumble 2015-11-10 18:53:42

+0

@YPCrumble它在由Django生成的html中聲明。如果同一個html文件也包含一個外部javascript文件,則該javascript可以引用該變量。 – 2015-11-11 20:11:50

+1

這是一個很好的答案,只要你在導入你的js文件之前聲明全局變量,你應該沒問題。謝謝。 – 2017-02-28 03:28:15

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); 
相關問題