2016-11-09 17 views
0

私のビューからいくつかの変数(約10)が必要なjavascript関数があります。ページが読み込まれると、再び変数を呼び出す必要はありません。私は、以下のようなコンテキストdictを使用してそれらを与えることができますが、おそらくより良いことが可能です。javascript関数にdjangoモデルを渡す方法

マイmodels.py

class Mymodel(models.Model): 
    my_field1 = # 
    my_field2 = # 
    ... 
    my_field10 = # 

マイviews.py

def myview(request): 
    context_dict={} 
    context_dict['myfield1'] = Mymodel.objects.get(id=1).myfield1 
    context_dict['myfield2'] = Mymodel.objects.get(id=1).myfield2 
    context_dict['myfield10'] = Mymodel.objects.get(id=1).myfield10 

マイtemplate.html

... 
<script> 
    <!-- 
    window.onpageshow = function() { 
    my_function('{{ myfield1 }}', '{{ myfield2 }}', ..., '{{ myfield10 }}'); 
    }; 
    --> 
</script> 
... 

マイjavascript.js

function my_function(myfield1, myfield2, ..., myfield10) { 
    //code 
} 

これらの変数はモデルのフィールドなので、モデルの定数を渡すだけです。どうやってやるの?私template.htmlそれは私がそれに取り組んでいくつかの時間だと私はserializeを使うべきだと思うが、私はどのように理解していない...

... 
<script> 
    <!-- 
    window.onpageshow = function() { 
    my_function(serializers.serialize("json", {{ mymodelistance }})); 
    }; 
    --> 
</script> 
... 

モデルのフィールドにアクセスするには、事前

+1

'serializers.serialize'がDjのですangoコード。あなたはDjangoビューでそれを呼び出す必要があります。 –

+1

あなたは少なくとも15年間スクリプトに保護コメントタグを入れる必要はありません。 –

答えて

0

に感謝angle js($ http.get)メソッドを直接使用して、必要に応じてスクリプトの変数に割り当てることができます。しかし、このためにはDjango Tastypieを使用しなければなりません。Django Tastypieを使うと、アクセス可能なデータを直列化することができます。

この回答は、表示中のデータに対して処理を行わない場合にのみ有効です。

保存する前にデータを処理したい場合でも、催眠水和を使用することができます。

+0

私は非常にbasilarなものを求めていると思うので、私はアプリやフレームワークを使用したくない – fabio

0

だからここに私の解決策:

マイviews.py

def myview(request): 
    context_dict={} 
    mymodelistance = Mymodel.objects.filter(id=1) 
    mymodelistance_json = serializers.serialize('json', mymodelistance) 
    context_dict['mymodelistance'] = mymodelistance_json 

マイtemplate.html

... 
<script> 
    window.onpageshow = function() { 
    my_function('{{ mymodelistance|safe }}'); 
    }; 
</script> 
... 

マイjavascript.js

function my_function(mymodelistance) { 
    var mymodelistance_obj = JSON.parse(flag) 
    var myfield1 = mymodelistance_obj[0].fields.myfield1; 
    var myfield2 = mymodelistance_obj[0].fields.myfield2; 
    ... 
    //code 
} 
関連する問題