Flask框架下Jinja传递Python列表到JavaScript报语法错误如何解决?
问题原因
你写的JS代码多套了一层不必要的大括号,触发了语法错误:
- 后端通过
json.dumps(devices)输出的devices_test本身就是符合JS语法的数组字面量,不需要额外用{}包裹 - 你现有的写法最终渲染出来的JS代码为
var data = { [{"Version": "V14E", ...}, ...] };,直接把数组塞到对象字面量里,不符合JS对象要求的键:值语法,所以会抛出声明缺失、属性赋值预期等报错。
修复方法
直接去掉包裹Jinja变量的多余大括号即可,修改后的JS代码如下:
function update_device_form(strDevice) { // 去掉多余的外层{},直接赋值 var data = {{ devices_test | safe }}; var device_index = document.getElementById("devices").selectedIndex; if (device_index == 0) { //IOW if no device is selected document.getElementById("device_id").value = ""; } else { document.getElementById("device_id").value = ''; } }
补充注意点
- Python的
json.dumps默认输出双引号格式的JSON,完全符合JS语法要求,不需要额外转义 safe过滤器必须保留,防止Jinja自动转义JSON里的特殊字符导致语法错误
内容的提问来源于stack exchange,提问作者LarryYourWaiter
相关产品推荐
相关产品推荐

