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

Django向Javascript传递数据导致JS内部函数失效问题求助

问题原因与解决方案

错误根因

Django模板引擎仅会解析渲染模板目录下的HTML文件内容,你写在独立静态JS文件中的{{ 变量 }}模板语法不会被Django处理,浏览器加载到的JS代码是原样的{{user_name|safe}},不符合JS语法规则,因此抛出SyntaxError: Unexpected token '{'错误。


可用解决方案

方案1:HTML模板内预定义全局变量

在HTML模板中引入你的script.js之前,先在<script>标签内定义需要的变量,Django会在渲染HTML时自动替换变量值:

<!-- 写在index.html中,位置在引入script.js之前 -->
<script>
window.currentUserName = {{ user_name|safe }};
</script>
<script src="你的script.js文件路径"></script>

之后在script.js中直接调用即可:

let user_name = window.currentUserName;

方案2:通过HTML元素data属性传递

如果不想使用全局变量,可以将值存入HTML元素的自定义data属性中,JS直接读取属性值:

<!-- 写在index.html中,比如给body标签加属性 -->
<body data-user-name="{{ user_name }}">
<!-- 页面其他内容 -->
</body>

在script.js中读取属性:

// 直接读取字符串
let user_name = document.body.dataset.userName;
// 若需要转成原始格式可以加JSON.parse
// let user_name = JSON.parse(document.body.dataset.userName);

视图代码优化建议

你的视图代码可以简化,无需额外查询数据库:request.user本身就是当前登录用户的User对象,直接调用属性即可,同时建议加未登录用户的兼容处理:

def index(request):
    if request.user.is_authenticated:
        user_name = f"{request.user.first_name} {request.user.last_name}"
    else:
        user_name = "访客"
    json_data = json.dumps(user_name)
    return render(request, 'index.html', {"user_name": json_data})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:09:03