代码之家  ›  专栏  ›  技术社区  ›  Nico Schlömer David Maze

tornado:将字符串数据传递给呈现页面中的javascript代码

  •  1
  • Nico Schlömer David Maze  · 技术社区  · 8 年前

    我想把字典数据从python传递到 index.html 是的。(我在这里使用的是Tornado,但对其他允许它的小框架是开放的。)

    我首先用 json.dumps 和这个

    def start_server():
        data = {"a": 1, "b": 3}
        string_data = json.dumps(data)
    
        class IndexHandler(tornado.web.RequestHandler):
            def get(self):
                path = os.path.join(os.path.dirname(__file__), "web")
                self.render(os.path.join(path, 'index.html'), data=string_data)
                return
    
        app = tornado.web.Application([(r"/", IndexHandler)])
        app.listen(8000)
        tornado.ioloop.IOLoop.current().start()
        return
    

    一起

    <script>
      console.log("{{data}}");
      obj = JSON.parse("{{data}}");
      console.log(obj);
    </script>
    

    index.html索引 给我

    {&quot;a&quot;: 1, &quot;b&quot;: 3}
    

    不用说 JSON.parse 失败了 &quot S.

    有什么不对劲的线索吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Leo K    8 年前

    你应该试试 {% raw data %} 是的。但是,请注意,由于在javascript引用的字符串中使用字符串,“数据”本身应该包含适合的内容:json.dumps()输出无效-您需要对其进行适当的转义-无论是在调用.render()的代码中还是在模板本身中(后者更可取)。也许这个:

    obj = JSON.parse({% raw json_encode(data) %});
    

    (使用字符串值的json_encode()将输出“转义数据”)