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

从Python向JS传递JSON时出现ReferenceError问题求助

问题分析与解决

核心问题1:Python端变量名不匹配

你的辅助函数返回的是test_dictionary和js_test_dictionary,但调用render_template时传递的是js_dictionary=js_dictionary——这里的js_dictionary并未定义,辅助函数返回的对应变量是js_test_dictionary,导致模板接收不到该变量,前端自然会报ReferenceError。

修复代码:

先接收辅助函数的返回值,再传递正确变量到模板:

# 替换your_helper_function为实际的辅助函数名
test_dict, js_test_dict = your_helper_function(...)
return render_template("study.html", language=selected, dictionary=dictionary, js_dictionary=js_test_dict)

核心问题2:前端模板变量引用错误

前端代码里的${js_dictionary}是JS模板字符串语法,但js_dictionary是jinja2模板变量,必须用jinja2的{{ }}语法注入,否则JS会将其视为未定义的本地变量。

两种修复方案:

方案1:直接注入为JS对象(更高效)

json.dumps已生成合法JSON字符串,可直接注入JS作为对象使用,无需JSON.parse:

document.addEventListener('DOMContentLoaded', function() {
    const translations = {{ js_dictionary }};
    document.querySelector('#check').onclick = function() {
        // 直接使用translations对象
    }
});

方案2:注入字符串后解析(适合需字符串处理的场景)

若要先获取字符串再解析,需用引号包裹注入的模板变量,jinja2会自动转义特殊字符:

document.addEventListener('DOMContentLoaded', function() {
    const dictionaryStr = "{{ js_dictionary }}";
    const translations = JSON.parse(dictionaryStr);
    document.querySelector('#check').onclick = function() {
        // 使用translations对象
    }
});

额外注意点

  • 可在Python端打印js_test_dictionary,确认json.dumps生成的JSON格式是否符合预期。
  • 若字典包含引号、换行等特殊字符,jinja2的{{ }}会自动转义,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:15:38