使用Django将JSON数据传递到前端

loc*_*boy 5 python sqlite django json

如果使用Django框架或Python,有没有办法将JSON对象传递到Web模板的前端?

例如,如果我想发送一个具有两个数组作为属性的对象(让我们说xvaluesyvalues),我怎样才能使用JavaScript或jQuery进行Ajax调用来获取具有属性的对象?

zee*_*kay 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),
)
Run Code Online (Sandbox Code Playgroud)


Has*_*sek 5

补充 zeekay 答案,如果您只想发送一个对象,您可以执行 json 转储,例如:

import json

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

    data_dict = getmydata() #lets supose is a dict
    return HttpResponse(json.dumps(data_dict))
Run Code Online (Sandbox Code Playgroud)

这样,您将通过 ajax 成功接收该数据,并用它做任何您想做的事情。

您也可以发送列表,当您收到响应时,有时您需要对数据进行 JSON.parse (有时因为当您发送字典时我认为没有必要)


cod*_*ape 5

如果我理解正确,您希望在 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)})
Run Code Online (Sandbox Code Playgroud)

template.html

<html>
    <head>
    <script type="text/javascript">
    var obj = {{ obj_as_json|safe }};
    </script>
    </head>
    ...
</html>
Run Code Online (Sandbox Code Playgroud)

将呈现为:

...
<script type="text/javascript">
var obj = {"a": 1, "b": 2};
...
Run Code Online (Sandbox Code Playgroud)

请注意,json.dumps仅适用于包含简单数据类型的字典。Django 支持将模型对象序列化为 json,使用:

from django.core import serializers
obj_as_json = serializers.serialize("json", my_model_object)
Run Code Online (Sandbox Code Playgroud)

更新:请注意,您需要使用“安全”来获取此信息:

  var obj = {"items": [{"human": "Genesis", "usfm": "GEN"},],}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

  var obj = {&quot;items&quot;: [{&quot;human&quot;: &quot;Genesis&quot;, &quot;usfm&quot;: &quot;GEN&quot;},],}
Run Code Online (Sandbox Code Playgroud)