2011-12-30 13 views
17

この質問は明白でなければなりませんが、わかりません。コンテキスト変数をDjangoのjavascriptファイルに渡すにはどうすればよいですか?

テンプレートでは、自分のメディアディレクトリにあるjsファイルにリンクします。そのファイルから、{{my_chart}}のようなコンテキスト変数にアクセスしたいと思います。

しかし、構文は異なりますか?ありがとうございました!!

+0

が重複する可能性を](http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) – Cory

答えて

16

このようには考えられません。ビューによって提供されるいくつかのデータにアクセスするには、js関数に渡す必要があります。

JSファイル:

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

ビューこのことができます:)

+0

[{{value | escapejs}}](https://docs.djangoproject.com)を見てください。/ja/dev/ref/templates/builtins /#escapejs) – danihp

15

アンジェイBobakの答えに加えて、あなたはまた、グローバル変数を生成することができます

// some html code 

my_cool_js_function({{param}}) 

希望あなたのテンプレートからJavascriptでたとえば、あなたのテンプレートは、このようなコードを生成することがあります:

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

あなたのスクリプトは、my_chartを参照することができます。

+0

@Brian_Nealこれはどのように機能しますか?つまり、javascriptファイルで 'console.log(my_chart);'のようなことをするだけで、どこに宣言する必要はありませんか? – YPCrumble

+0

@YPCrumbleこれは、Djangoによって生成されたhtmlで宣言されています。同じHTMLファイルに外部のjavascriptファイルも含まれている場合、javascriptはその変数を参照できます。 –

+1

これはすばらしい答えです。jsファイルをインポートする前にグローバル変数を宣言している限り、問題はないはずです。ありがとう。 –

3
私はPythonの変数がオブジェクトである場合は、引用符でそれを入れない限り、それはあなたのテンプレート内、他の言葉で、構文エラーがスローされますというエラーに数回走ったので、私はまた、追加することになり

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

さらに、そのオブジェクトをコンテキストに入れる前に、最初にJSONにシリアル化することをお勧めします。そうしないと、文字列の解析が必要になります。私は、このステップの前に日付オブジェクトを文字列に変換する必要があることも発見しました。

import jsonpickle 

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

そして最後に、JSにあなたがして、適切にオブジェクトを反復処理し、あなたはおそらく実行してpythonでなければならないような値を使用することができます:[Djangoのテンプレート変数とJavascriptの

var my_var_parsed = jQuery.parseJSON(my_var);