首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决JavaScript使用Jinja模板中呈现的数据引发SyntaxError?

如何解决JavaScript使用Jinja模板中呈现的数据引发SyntaxError?
EN

Stack Overflow用户
提问于 2018-08-31 03:04:37
回答 2查看 0关注 0票数 0

如何在JavaScript中使用渲染的JSON数据?

代码语言:javascript
复制
var obj = JSON.parse({{ data }})
for (i in obj){
   document.write(obj[i].text + "<br />");
}
代码语言:javascript
复制
def get_nodes(node):
    d = {}
    if node == "Root":
        d["text"] = node
    else:
        d["text"] = node.name

    getchildren = get_children(node)
    if getchildren:
        d["nodes"] = [get_nodes(child) for child in getchildren]
    return d

tree = get_nodes("Root")
return render_template("folder.html", data=tree)

如果我只是放入{{ data }}HTML部分,我看到的看起来是正确的

代码语言:javascript
复制
{'text': 'Root', 'nodes': [{'text': u'Prosjekt3'}, {'text': u'Prosjekt4', 'nodes': [{'text': u'mappe8'}]}]}
EN

回答 2

Stack Overflow用户

发布于 2018-08-31 11:23:01

Flask的Jinja环境自动转义HTML模板中呈现的数据。这是为了避免安装问题,如果开发人员尝试呈现不受信任的用户输入。由于传递的Python对象被视为JSON,因此Flask提供了tojson自动将数据转储到JSON并将其标记为安全的过滤器。

代码语言:javascript
复制
return render_template('tree.html', tree=tree)
代码语言:javascript
复制
var tree = {{ tree|tojson }};

代码语言:javascript
复制
# already dumped to json, so tojson would double-encode it
return render_template('tree.html', tree=json.dumps(tree))
代码语言:javascript
复制
var tree = {{ tree|safe }};

也可以Markup在渲染之前包装字符串,等同于safe过滤器

代码语言:javascript
复制
# already dumped and marked safe
return render_template('tree.html', tree=Markup(json.dumps(tree)))
代码语言:javascript
复制
var tree = {{ tree }};
票数 0
EN

Stack Overflow用户

发布于 2018-08-31 12:24:02

问题是服务器不返回JSON,而是呈现HTML,会使用&符号转义某些符号

代码语言:javascript
复制
return render_template("folder.html", data=tree)

试试下面的代码:

代码语言:javascript
复制
return flask.jsonify(**tree)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档