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

IT技术 javascript python json python-2.7 jinja2
2021-03-05 03:36:35

我正在尝试将纬度/经度点作为 JSON 对象从 Python 发送到 javascript。我正在使用 Flask 所以以下是 Jinja 模板..

Python:

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

带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>

我使用 eval 是因为变量 = {{ data }} 的标准 Jinja 符号不起作用,我发现一些建议 eval 是必要的。有什么建议吗?

1个回答

Flask Jinja2 文档很好地涵盖了这一点。“标准过滤器”部分下的第一个示例准确显示了如何将 Python 中的 JSON 对象嵌入到 Javascript 脚本中:

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

所以在这种情况下:

var lat_lng = {{ lat_lng|tojson|safe }};

tojson调用dumps数据,所以你应该将数据直接传递给模板而不是调用dumps它,否则你对数据进行双重序列化并最终得到一个 JSON 字符串。

是的,阅读相同的 Flask 文档,我已经完全尝试过该语法并收到控制台错误“lat_lng 未定义”。此外,该行在我的 IDE 中恰好在第一个大括号的列处出现了“无效的属性 ID”的语法错误。我正在运行 Python 2.7 和 Flask 0.10.1
2021-05-12 03:36:35
你确定你通过 lat_lng 作为模板参数传递?
2021-05-14 03:36:35
我只是决定使用 AJAX 和 jquery 而不是搞乱它。谢谢!
2021-05-17 03:36:35