将 Python 请求(在 Django views.py 中)Json 数据传递给 Javascript

Pass Python Requests (in Django views.py) Json Data to Javascript

我有这个 python 代码,它获取 json 并解析它:

from django.http import HttpResponse
import json, requests

def find(request):
    context = {}
    platformUrl = 'https://www.igdb.com/api/v1/platforms'
    platformReq = requests.get(platformUrl, headers={'Authorization': 'Token token="1234"'})
    platformData = json.loads(platformReq.text)
    platformList = platformData['platforms']
    print platformList

它用 print 语句输出:

[{u'slug': u'saturn', u'id': 32, u'name': u'Sega Saturn'}, {u'slug': u'mac', u'id': 14, u'name': u'Mac'}, {u'slug': u'vc', u'id': 47, u'name': u'Virtual Console (Nintendo)'}

我想将该数据传递给 javascript,并将 json 中的 ID 和名称放入此 javascript。 (selectize.js) 这可能需要某种类型的 for 循环,可能是 javascript,甚至是 djangos?:

    options: [
    {id: 1, title: 'Spectrometer'},
    {id: 2, title: 'Star Chart'},
    {id: 3, title: 'Electrical Tape'}
]

谢谢

编辑: 在@satoru 的 link 之后,我对其进行了调查,并将我的代码更新为:

    from django.http import HttpResponse
import json, requests

def find(request):
    context = {}
    platformUrl = 'https://www.igdb.com/api/v1/platforms'
    platformReq = requests.get(platformUrl, headers={'Authorization': 'Token token="1234"'})
    platformList = json.dumps(platformData)

    print platformList
    return render_to_response('find.html',{'platformList':platformList})

它现在输出:

{"platforms": [{"slug": "saturn", "id": 32, "name": "Sega Saturn"}, {"slug": "mac", "id": 14, "name": "Mac"}, {"slug": "vc", "id": 47, "name": "Virtual Console (Nintendo)"}

然后我如何将其传递给 javascript?

如果 API 已经 return 一个 JSON 编码的响应,您可以只使用 platformReq.text。将其传递给 render_to_response 后,您可以访问模板中的 JSON 编码字符串。

现在您可以将 Javascript 模块设计为可配置对象,例如:

<script src="my_module.js"></script>
<script>
   MyModule.initialize({{ json_encoded }})
</script>

查看此 template library 以将您的平台列表转换为模板中的 JSON 对象

示例(在您的模板中):

    <script src="your_standalone_js.js">
    <script>
        var js_variable = {{platformList | jsonify }};
        function_in_standalone_js(js_variable);
    </script>

your_standalone_js.js:

    var function_in_standalone_js = function(js_variable){
        var options = js_variable['platforms'];
        //What ever you need to do with options
    };