使用Jinja将数据作为JSON对象从Python发送到Javascript

tes*_*ins 20 javascript python json jinja2 python-2.7

我正在尝试将一个lat/long点作为JSON对象从Python发送到javascript.我正在使用Flask所以以下是Jinja模板..

蟒蛇:

@app.route('/')
def homepage():
    lat_lng = (39.7392,-104.9847) 
    return render_template("index_v2.html", lat_lng=json.dumps(lat_lng))
Run Code Online (Sandbox Code Playgroud)

使用js的html:

<script type='text/javascript'>
    var map;
    function initialize() {
      // Create the map.
      var lat_lng = eval('({{ lat_lng }})')
      map = new google.maps.Map(document.getElementById('map-canvas'), {
        zoom: 8,
        center: new google.maps.LatLng(lat_lng)
      });

    }

    google.maps.event.addDomListener(window, 'load', initialize);
  </script>
Run Code Online (Sandbox Code Playgroud)

我正在使用eval,因为变量= {{data}}的标准Jinja表示法不起作用,我发现了一些eval是必要的建议.有什么建议?

Den*_*s L 29

Flask Jinja2文档很好地介绍了这一点."标准过滤器"部分下的第一个示例显示了如何将来自python的JSON对象嵌入到Javascript脚本中:

<script type=text/javascript>
    doSomethingWith({{ user.username|tojson|safe }});
</script>
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下:

var lat_lng = {{ lat_lng|tojson|safe }};
Run Code Online (Sandbox Code Playgroud)

tojson调用dumps数据,因此您应该将数据直接传递给模板而不是调用dumps它,否则您需要对数据进行双序列化并最终使用JSON字符串.