2011-08-11 130 views
4

如果一般使用Django框架或Python,是否有方法將JSON對象傳遞到Web模板的前端?例如,如果我想發送一個具有兩個數組作爲屬性的對象(假設我們說xvaluesyvalues),我將如何使用JavaScript或jQuery執行Ajax調用來獲取具有該對象的對象屬性?使用Django將JSON數據傳遞到前端

+1

您的意思是像將列表轉換爲json對象並將它傳遞給您的模板?或發送json作爲對Ajax請求的響應?你能再解釋一下你的問題嗎? :p – Hassek

+0

參見上面的編輯。 – locoboy

回答

4

補充zeekay回答,如果要發送只有一個對象,你可以做一個json轉儲,例如:

from django.utils import simplejson 

def my_ajax_view(request): 
    if not request.is_ajax(): 
     raise Http404 

    data_dict = getmydata() #lets supose is a dict 
    return HttpResponse(simplejson.dumps(data_dict)) 

這樣,通過您將收到的數據你阿賈克斯成功,並做任何你想要的。

可以將列表發送過也,當你有時會收到你的迴應,你需要做一個JSON.parse上的數據(當您發送一本字典,我認爲是沒有必要的,有時引起)

6

當然,只要設置一個返回JSON並向它發出請求的視圖。這裏有一個簡單的例子:

import json  
from django.http import HttpResponse 
from django.template import Template, Context 

def ajax(request): 
    """returns json response""" 
    return HttpResponse(json.dumps({'foo': 'bar'}), mimetype='application/json') 

def index(request): 
    """simple index page which uses jquery to make a single get request to /ajax, alerting the value of foo""" 
    t = Template(""" 
    <!doctype html> 
     <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
     <script type="text/javascript"> 
     $.get('/ajax/', function(data) { 
      alert(data['foo']); 
     }); 
     </script> 
    </head> 
    </html>""") 
    return HttpResponse(t.render(Context())) 

# urlconf 
urlpatterns = patterns('', 
    (r'^$', index), 
    (r'^ajax/', ajax), 
) 
3

如果我理解你正確地說,你想在HTML輸出中渲染一些JSON。

要做到這一點,從視圖模板通過JSON編碼的對象:

views.py

import json 

def myview(request): 
    obj = {"a": 1, "b": 2} 
    return render_to_response("template.html", {"obj_as_json": json.dumps(obj)}) 

template.html

<html> 
    <head> 
    <script type="text/javascript"> 
    var obj = {{ obj_as_json }}; 
    </script> 
    </head> 
    ... 
</html> 

會呈現:

... 
<script type="text/javascript"> 
var obj = {"a": 1, "b": 2}; 
... 

請注意,json.dumps僅適用於包含簡單數據類型的字典。 Django支持將模型對象序列化爲json,使用:

from django.core import serializers 
obj_as_json = serializers.serialize("json", my_model_object) 
+2

我想我沒有正確理解這個問題。 – codeape

+0

他正在要求一個Ajax案例;)另外,我認爲你的解決方案不能完全工作,因爲Django會轉義json結果的某些部分(通常是雙引號,它將成爲'"'html實體)。你必須在json的某處調用['mark_safe()'](https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.safestring.mark_safe),然後將它傳遞給模板。 – Anto

相關問題