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

如何在HTML页面的JavaScript中访问Django返回的JSON数据

如何在JavaScript中正确访问Django返回的JSON数据

你遇到的问题核心是:把JSON字符串当成了JavaScript对象来处理,所以才会出现键长度不符合预期的情况。咱们一步步来解决:

问题原因分析

你后端用json.dumps(context)把Python字典转成了JSON字符串,然后在模板里通过{{ myData | escapejs | safe }}输出到JS中——这时候dataFromDjango拿到的是一个字符串(比如"{\"movieName\": \"Avengers\", \"releaseYear\": \"2019\", \"boxOffice\": \"2.3B\"}"),而不是真正的JavaScript对象。

当你调用Object.keys(dataFromDjango)时,JS会把字符串当成类数组来处理,返回的是每个字符的索引(比如0,1,2,...),所以长度自然不是你预期的3。


解决方案1:解析JSON字符串为JS对象

最简单的修改方式是在JS里把字符串解析成对象:

// 把模板输出的JSON字符串解析为JavaScript对象
var dataFromDjango = JSON.parse("{{ myData | escapejs | safe }}");
console.log(dataFromDjango); // 现在是一个真正的对象
var t = Object.keys(dataFromDjango).length;
console.log(t); // 输出3,符合预期

解决方案2:直接让Django输出JS对象(更简洁安全)

其实你不需要在后端手动json.dumps,可以直接把Python字典传到模板,用Django的过滤器直接转成JS对象:

修改Python代码:

context = {}
context['movieName'] = 'Avengers'
context['releaseYear'] = str(2019)
context['boxOffice'] = '2.3B'
# 直接传递字典,不用提前转成JSON字符串
return render(request, "InterfacePage.html", {"myData" : context})

修改JavaScript代码:

// 使用js过滤器,把Python字典直接转为JavaScript对象
var dataFromDjango = {{ myData | js }};
console.log(dataFromDjango);
var t = Object.keys(dataFromDjango).length;
console.log(t); // 输出3

方案3:用json_script标签(推荐复杂场景)

如果你的数据结构更复杂,或者担心XSS风险,推荐用Django的json_script标签:

模板中添加:

<!-- 把数据渲染成一个隐藏的script标签 -->
{{ myData|json_script:"movie-data" }}

JavaScript代码:

// 读取script标签的内容并解析为对象
var dataFromDjango = JSON.parse(document.getElementById('movie-data').textContent);
console.log(dataFromDjango);
var t = Object.keys(dataFromDjango).length;
console.log(t);

这种方式会自动处理转义,安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:32:29