【问题标题】:String passed as &#34 from Python Flask to HTML Page [duplicate]字符串作为 &#34 从 Python Flask 传递到 HTML 页面 [重复]
【发布时间】:2018-09-09 09:35:39
【问题描述】:

我正在开发 Flask 应用程序。 我想将简单的 json 从 app.py 传输到 html 页面。

这是app.py中的相关代码:

jsonArr = [{"type": "circle", "label": "New York"},
           {"type": "circle", "label": "New York"}]

return render_template('demo.html', foo=42, imgs=jsonArr)

这就是我在 html 中的 javascript 脚本中接收它的方式:

    <script>
    console.log("HI")
    var foo = {{ foo }}
    console.log(foo)
    var images = {{ imgs }}
    console.log(images)

foo 被正确接收(当我删除用于接收 imgs 的行时,我看到控制台上的打印)

但 imgs 出错:Uncaught SyntaxError: Unexpected token &amp; 这是我在 chrome 浏览器源代码中看到的:

var images = [[&#39;circle&#39;, &#39;New York&#39;], [&#39;triangle&#39;, &#39;Amsterdam&#39;]]

这是html声明:

<!DOCTYPE html>
<html class="no-js" lang="en">

我尝试添加/删除&lt;meta charset="UTF-8"&gt;,但没有成功。

我错过了什么?谢谢

【问题讨论】:

    标签: javascript python html flask ascii


    【解决方案1】:

    为了避免跨站脚本攻击,flask 会自动转义 HTML 序列。如果你想避免这种情况,你可以直接告诉 Flask 你知道你在做什么:

    https://stackoverflow.com/a/3266740/3029173

    from flask import Markup
    value = Markup('<strong>The HTML String</strong>')
    

    但是!!从安全角度来看,这是有风险的。如果您有任何可能以 JSON 结尾的用户数据,则需要考虑另一种方法。

    您需要清理 JSON,这样用户就不会出现 &lt;/script&gt;&lt;script&gt;do bad things here&lt;/script&gt; 字符串

    【讨论】:

    • 这个链接有答案:var images = {{ imgs }} 帮我解决了
    【解决方案2】:

    您应该有一个单独的路由,其中​​包含 JSON 格式的数据。

    from flask import jsonify
    
    jsonArr = [{"type": "circle", "label": "New York"},
           {"type": "circle", "label": "New York"}]
    
    return jsonify(jsonArr)
    

    【讨论】:

    • 我在 python 中没有 json.jsonify 方法
    • from flask import jsonify导入
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多