我很难将Flask / Python变量传递给Javascript。
(43.8934276, -103.3690243), (47.052060, -91.639868), (45.1118, -95.0396) 那是我的dict项目上运行以下命令时的输出。 new_list = [tuple(d.values()) for d in MySQL_Dict] output = ', '.join('(' + ', '.join(i) + ')' for i in new_list)
(43.8934276, -103.3690243), (47.052060, -91.639868), (45.1118, -95.0396)
new_list = [tuple(d.values()) for d in MySQL_Dict]
output = ', '.join('(' + ', '.join(i) + ')' for i in new_list)
此方法不好,但是我添加了详细信息,根本不是正确的格式。
({'lat': '43.8934276', 'lng': '-103.3690243'}, {'lat': '47.052060', 'lng': '-91.639868'}, {'lat': '45.1118', 'lng': '-95.0396'})
然后在模板方面,我尝试了以下JavaScript行
var other_coords = {{ MySQL_Dict|tojson }}; var other_coords = {{ MySQL_Dict|tojson|safe }}; var still_more = JSON.parse(other_coords);
没有一个可以一起工作或单独工作。
json_out = json.dumps(My_Dict)
似乎当前接受的答案中存在一个可能的安全漏洞:如果我们传递给javascript的对象的某个字符串中带有单引号,则该单引号不会被逸出json.dumps,因此允许注入任意代码转换成javascript。最好使用Flask的tojson()模板过滤器,请参阅docs,因为它可以对所有此类字符进行正确的转义(将它们替换为unicode代码)。
json.dumps
tojson()
这是我的解决方案:
view.py
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def hello_world(): user = {'firstname': "Mr.", 'lastname': "My Father's Son"} return render_template("index.html", user=user) if __name__ == '__main__': app.run()
index.html
<p>Hello, <span id="username"></span></p> <script> var user = JSON.parse('{{ user | tojson | safe}}'); document.getElementById('username').innerHTML = user.firstname + " " + user.lastname; </script>
生成的JS看起来像:
var user = JSON.parse('{"firstname": "Mr.", "lastname": "My Father\u0027s Son"}');
这是绝对安全的。例如,如果我们使用json.dumps-powered解决方案,我们将得到
var user = JSON.parse('{"firstname": "Mr.", "lastname": "My Father's Son"}');
这在语法上是不正确的(至少可以这样说)。