You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask传递数组至JavaScript遇Uncaught SyntaxError错误求助

解决Flask模板中传递数组到JavaScript时的HTML转义问题

这个问题我当初刚用Flask的时候也踩过坑,核心原因是Jinja2默认会对变量进行HTML转义——把单引号、双引号这类特殊字符转换成'这类HTML实体,本来是为了防止XSS攻击,但这就导致JavaScript没法正确解析这个数组了。

给你两个靠谱的解决办法,按推荐程度排序:

1. 使用tojson过滤器(首选)

tojson是Flask/Jinja专门提供的工具,能把Python对象转换成合法的JSON字符串,自动处理所有转义逻辑,输出的内容JavaScript可以直接识别成数组对象,而且安全性拉满。

操作步骤:

首先在Python视图函数里,把数组改成标准的Python数据结构(把你给的JS格式转成Python字典列表):

array = [
    {"country": "Macediona", "city": ["Skopje", "Ohrid", "Bitola"]},
    {"country": "Switzerland", "city": ["Bazel", "Zurich", "Zeneva"]},
    {"country": "Srbia", "city": ["Nis", "Belgrad"]}
]
return render_template("你的模板文件名.html", array=array)

然后在HTML模板的JavaScript部分这么写:

var list = {{ array|tojson }};

这样Jinja会自动把Python数组转换成合法的JSON格式,JavaScript直接就能用,完全不会有转义问题。

2. 使用safe过滤器(仅无用户输入时用)

如果你能100%确定数组里的内容都是自己写的,没有任何用户输入的内容(避免XSS风险),也可以用safe过滤器告诉Jinja:这个变量不用转义!

写法是这样的:

var list = {{ array|safe }};

但一定要注意:如果数组里包含用户提交的内容,绝对不能用这个方法,否则可能会引入XSS漏洞,所以还是优先选第一种方法。

为什么原来的写法会报错?

当你直接写var list = {{ array }}时,Jinja会把Python数组转成字符串,同时把所有单引号替换成',最终输出到页面的内容会变成:

var list = [{ 'country': 'Macediona', city: ['Skopje', ...] }];

JavaScript解析时看到'这种HTML实体,就会认为是非法语法,自然抛出Unexpected token &的错误。

内容的提问来源于stack exchange,提问作者mitevva_t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:46:36