2016-11-09 30 views
0

我有一個javascript函數,需要一些變量(約10)從我的視圖。一旦加載頁面,我不需要再次調用變量。我可以使用上下文字典給他們,如下所示,但也許可以做得更好。如何將django模型傳遞給j​​avascript函數

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 
} 

這些變量是一個模型的字段,所以我只需要通過模型傳遞。我怎樣才能做到這一點?這一段時間,我就可以工作,我想我應該用serialize,但我不知道如何...

template.html

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

在此先感謝

+1

'serializers.serialize'是了Dj安哥代碼。你需要在你的Django視圖中調用它。 –

+1

而且您至少需要15年的時間才能在腳本中添加保護性評論標籤。 –

回答

0

要訪問您的示範田你可以直接使用angular js($ http.get)方法並根據你的需要將它分配給腳本的變量。但爲此,您將不得不使用Django Tastypie,這將允許您序列化可以訪問的數據。

當且僅當您不想對數據進行處理時,此答案纔有效。

即使您想在保存之前處理數據,您也可以使用tastypie水合作用。

+0

我認爲要問一些非常基礎的東西,所以我寧願不使用應用程序或框架 – 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 
} 
相關問題