龙卷风:将字符串数据传递给渲染页面中的 javascript 代码
tornado: pass string data to javascript code in a rendered page
我想将字典数据从 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
给我
{"a": 1, "b": 3}
不用说 JSON.parse
那些 "
失败了。
这里有什么问题的提示吗?
您或许应该试试 {% raw data %}
。但是,请注意,由于您在 Javascript 引用的字符串中使用字符串,因此 'data' 本身应该包含适合该内容的内容:并且 json.dumps() 输出无效 - 您需要适当地转义它——在调用 .render() 的代码中或在模板本身中(后者更可取)。也许是这样的:
obj = JSON.parse({% raw json_encode(data) %});
(使用字符串值的 json_encode() 将输出 "escaped-data")
我想将字典数据从 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
给我
{"a": 1, "b": 3}
不用说 JSON.parse
那些 "
失败了。
这里有什么问题的提示吗?
您或许应该试试 {% raw data %}
。但是,请注意,由于您在 Javascript 引用的字符串中使用字符串,因此 'data' 本身应该包含适合该内容的内容:并且 json.dumps() 输出无效 - 您需要适当地转义它——在调用 .render() 的代码中或在模板本身中(后者更可取)。也许是这样的:
obj = JSON.parse({% raw json_encode(data) %});
(使用字符串值的 json_encode() 将输出 "escaped-data")