2011-08-11 74 views
4

一般的にDjangoフレームワークまたはPythonを使用する場合、WebテンプレートのフロントエンドにJSONオブジェクトを渡す方法はありますか?Djangoを使用してフロントエンドにJSONデータを渡す

たとえば、プロパティとして2つの配列を持つオブジェクトを送信する場合は(たとえば、xvaluesyvalues)、JavaScriptまたはjQueryを使用してAjax呼び出しを実行してオブジェクトを取得する方法プロパティ?

+1

リストをjsonオブジェクトに変換してテンプレートに渡すようなものですか?またはjsonをAjaxリクエストへの応答として送信しますか?もう少しあなたの質問を説明できますか? :p – Hassek

+0

上記の編集内容を参照してください。 – locoboy

答えて

4

、あなたは例えば、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を返すビューを設定してリクエストしてください。ここでは簡単な例です:

zeekay答えを補完
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

関連する問題