将字典传递给模板

时间:2017-05-18 14:58:48

标签: javascript python dictionary bottle

我正在编写一个小型Web应用程序来显示一些数据,这些数据当前存储为dict。我需要将其传递给模板,但我继续收到javascript错误:Unexpected identifier 'name'. Expected ';' after variable declaration.

我使用的python代码是:

from bottle import run
from bottle import template

app = Bottle()


@app.route("/hello")
def hello():
    # .... code to read and clean the data
    my_data = {"name": "my name", "parent": "null", "children": "children"}
    return template('tree', **my_data)


run(app, host='localhost', port=8080, debug=True)

和.tpl文件是:

 <body>

<!-- load the d3.js library -->
<script src="http://d3js.org/d3.v3.min.js"></script>

<script>

var treeData = {{!name}};

//some javascript to display the data

</script>
</body>
</html>

如何确保dict值作为字符串传递,或者js以某种方式可用于显示?

理想情况下,js使用的数据格式应为:

var treeData =  [{"name": "Top Level",
"parent": "null",
"children": [
  {
    "name": "Level 2: A",
    "parent": "Top Level",
    "children":}]}]

1 个答案:

答案 0 :(得分:2)

首先将字典转换为JSON。通过这种方式,浏览器上的javascript可以将数据作为对象读取。

接下来,由于模板中的变量是name,我认为你应该加载名称作为参数的模板。总的来说,以下内容应该适用于您的最终结果

import json
def hello():
     ....
     my_data = {"name": "my name", "parent": "null", "children": "children"}
     return template('tree', name=json.dumps(my_data))