JSON 编码 Flask 到 Javascript

Jör*_*han 2 javascript python json flask

我坐在一个基于 Flask 的网络应用程序上。理论上,我想从磁盘加载一个 JSON 文件并将其提供给网站上的 javascript。

def getData():
    check_for_update()
    with open(LOCAL_file,"rb") as myfile:
        data = json.load(myfile)
    udate = data["today"] 
    return (udate, data)
Run Code Online (Sandbox Code Playgroud)

然后我将它发送到页面

return render_template('./index2.html', udate = thisdata[0], data = json.dumps(thisdata[1]))
Run Code Online (Sandbox Code Playgroud)

现在在页面上我只是尝试

def getData():
    check_for_update()
    with open(LOCAL_file,"rb") as myfile:
        data = json.load(myfile)
    udate = data["today"] 
    return (udate, data)
Run Code Online (Sandbox Code Playgroud)

然后导致这样的事情

在此处输入图片说明

这不能被解析。当我复制和粘贴它时,它工作正常,python 也没有抱怨。

Mar*_*ers 6

dataHTML 转义,因为 Jinja2 默认情况下会转义所有内容以安全嵌入 HTML 页面。

最好不要在视图中编码为 JSON,而是在模板中执行此操作,并使用 Flasktojsonsafe过滤器。

所以在thisdata[1]未编码的视图中传递:

return render_template(
    './index2.html', udate=thisdata[0], data=thisdata[1])
Run Code Online (Sandbox Code Playgroud)

并在视图中:

return render_template(
    './index2.html', udate=thisdata[0], data=thisdata[1])
Run Code Online (Sandbox Code Playgroud)

tojson生成的 JSON 数据也是 HTML 安全的(尽管带有"引号,因此它不适合嵌入 HTML 标记属性中),并且safe过滤器可用于关闭 HTML 编码。这里不需要使用JSON.parse(),生成的 JSONtojson是严格的 JavaScript 子集。

请参阅API 文档中的JSON 支持部分

该模块的htmlsafe_dumps()功能json也可用作|tojsonJinja2 中调用的过滤器。请注意,内部script标签不能进行转义,因此|safe如果您打算在script标签内部使用它,请确保禁用转义[.]

和Flask 模板文档的标准过滤器部分

tojson()
此函数将给定的对象转换为 JSON 表示。例如,如果您尝试动态生成 JavaScript,这将非常有用。


归档时间:

查看次数:

1880 次

最近记录:

7 年,8 月 前