這個問題一定很明顯,但我無法弄清楚。如何將我的上下文變量傳遞給Django中的JavaScript文件?
在模板中,我鏈接到我的媒體目錄中的js文件。從該文件中,我想訪問像{{my_chart}}這樣的上下文變量。
但語法不同?謝謝!!
這個問題一定很明顯,但我無法弄清楚。如何將我的上下文變量傳遞給Django中的JavaScript文件?
在模板中,我鏈接到我的媒體目錄中的js文件。從該文件中,我想訪問像{{my_chart}}這樣的上下文變量。
但語法不同?謝謝!!
我不認爲這是可能的。如果你想訪問視圖提供的一些數據,你必須將它傳遞給js函數。
例
js文件:
my_cool_js_function(some_param){
// do some cool stuff
}
視圖
// some html code
my_cool_js_function({{param}})
希望這有助於:)
請記住看看[{{value | escapejs}}](https://docs.djangoproject.com/en/dev/ref/templates/builtins /#escapejs) – danihp 2011-12-30 21:00:45
除了安傑Bobak的回答,您還可以生成一個全局變量在您的模板的Javascript中。例如,您的模板可能是這樣生成代碼:然後
<script>
var my_chart = {{ the_chart }};
</script>
您的腳本可以參考my_chart
。
@Brian_Neal這是如何工作的?也就是說,你可以在javascript文件中做一些像'console.log(my_chart);'這樣的東西,而不必在任何地方聲明它? – YPCrumble 2015-11-10 18:53:42
@YPCrumble它在由Django生成的html中聲明。如果同一個html文件也包含一個外部javascript文件,則該javascript可以引用該變量。 – 2015-11-11 20:11:50
這是一個很好的答案,只要你在導入你的js文件之前聲明全局變量,你應該沒問題。謝謝。 – 2017-02-28 03:28:15
我還要補充,因爲我遇到了錯誤幾次,如果蟒蛇變量是一個對象,除非你把它放在引號它會拋出一個語法錯誤,換句話說,你的模板中,
<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);
可能重複的[Django的模板變量和Javascript ](http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) – Cory 2017-01-17 04:10:43