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

Posted

技术标签:

【中文标题】使用 Jinja 将数据作为 JSON 对象从 Python 发送到 Javascript [重复]【英文标题】:sending data as JSON object from Python to Javascript with Jinja [duplicate] 【发布时间】:2014-09-03 08:52:07 【问题描述】:

我正在尝试将 lat/long 点作为 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 是因为 variable = data 的标准 Jinja 表示法不起作用,我发现一些建议 eval 是必要的。有什么建议吗?

【问题讨论】:

如果退出 eval 然后使用 console.log(lat_lng) 打印 lat_lng 变量会发生什么??? 【参考方案1】:

The Flask Jinja2 documentation 很好地涵盖了这一点。 “标准过滤器”部分下的第一个示例准确显示了如何将 JSON 对象从 python 嵌入到 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 你确定你通过 lat_lng 作为模板参数? 我只是决定使用 AJAX 和 jquery 而不是搞乱它。谢谢!

以上是关于使用 Jinja 将数据作为 JSON 对象从 Python 发送到 Javascript [重复]的主要内容,如果未能解决你的问题,请参考以下文章

渲染JSON而不替换Jinja中的字符[重复]

使用 Jinja2 在 GAE 中存储 Javascript 对象

从 jinja2 调用 python 函数

使用 jinja2 时如何将新条目添加到字典对象中?

jQuery Ajax 调用返回 JSON 字符串而不是对象数组

将 Html 从模型/数据库和 jinja 中的 jinja 传递给 Jinja?