【问题标题】:Pass Python Requests (in Django views.py) Json Data to Javascript将 Python 请求(在 Django views.py 中)Json 数据传递给 Javascript
【发布时间】:2015-11-22 12:41:14
【问题描述】:

我有这个 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 的链接,我查看了它,并将我的代码更新为:

    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})

它现在输出这个:

{“平台”:[{“slug”:“土星”,“id”:32,“名称”:“世嘉土星”},{“slug”:“mac”,“id”:14,“名称”:“Mac”},{“slug”:“vc”,“id”:47,“名称”:“虚拟控制台(任天堂)”}

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

【问题讨论】:

  • @satoru 我不明白这个问题如何适用于我的。
  • 你可以创建一个只包含你想要的键的新字典,然后用 JSON 编码。
  • @satoru 我已经有了 JSON 格式的文件,不是吗?我使用 python 请求获取了数据,并希望将我已经以 JSON 格式获取的数据传递给 javascript 文件。还是我误会了什么?
  • @satoru 我进一步查看了您的链接,您可以看看我的编辑并告诉我。谢谢

标签: javascript python json django python-requests


【解决方案1】:

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

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

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

【讨论】:

  • 我没有完全理解,“my_module.js”是从哪里来的?
【解决方案2】:

查看此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
    };

【讨论】:

  • 它已经是 JSON 格式(参见:platformList 和输出是什么),我想将我从 API 解析的 JSON 传递到我上面提供的 javascript 代码中。跨度>
  • 当它被传递给模板时,你尝试设置一个等于它的 Javascript 变量,它会将它转换为字符串。 Jsonify 库允许您在模板中设置 Javascript 变量,如下所示:var js_variable = {{platformList | jsonify }};
  • 我认为使用 json.dumps(platformData) 会将其转换为 JSON。现在我的控制台输出是:{"platforms": [{"slug": "saturn", "id": 32, "name": "Sega Saturn"}, {"slug": "mac", "id": 14, "name": "Mac"}, {"slug": "vc", "id": 47, "name": "Virtual Console (Nintendo)"} 这不是 JSON 吗?
  • 它是 JSON,但是当您将其设置为 Javascript 变量时,它会转换回字符串。 jsonify 解决了这个问题。
  • 好的,我现在明白了。如果我要把它放在一个独立的 JS 文件中,我会怎么做?另外,一旦它在 javascript 中,我怎么能让 JSON 用它的值填充这个 javascript?例如:平台列表 JSON {"platforms": [{"slug": "saturn", "id": 32, "name": "Sega Saturn"}, {"slug": "mac", "id": 14, "name": "Mac"}, {"slug": "vc", "id": 47, "name": "Virtual Console (Nintendo)"} 进入这个 JS:options: [ {id: 32, title: 'Sega Saturn'}, {id: 14, title: 'Mac'}, {id: 47, title: 'Virtual Console (Nintendo'} ]
猜你喜欢
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 2018-02-02
  • 2010-11-29
  • 2023-03-21
相关资源
最近更新 更多