торнадо: передать строковые данные в код JavaScript на визуализированной странице - PullRequest
0 голосов
/ 26 июня 2018

Я хотел бы передать данные словаря из Python в index.html.(Я использую торнадо здесь, но я открыт для других небольших платформ, которые позволяют это.)

Сначала я сериализирую данные с 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 с.

Любой намек на то, что происходитздесь не так?

1 Ответ

0 голосов
/ 26 июня 2018

Возможно, вам следует попробовать {% raw data %}.Тем не менее, обратите внимание, что поскольку вы используете строку внутри строки в кавычках Javascript, сама «data» должна содержать что-то подходящее для этого: и вывод json.dumps () недопустим - вам нужно будет экранировать его соответствующим образом - либо в кодеэто вызывает .render () или в самом шаблоне (последний предпочтительнее).Может быть так:

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

(используя тот факт, что json_encode () строкового значения выведет «escaped-data»)

...