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

如何在外部JavaScript文件中访问Django模板变量?

解决方案

方法1:将Django变量注入全局window对象(最直接)

在你的Django模板(比如页面模板或base.html)里,在引入外部JS文件之前,添加内联script标签把变量挂载到window对象:

<!-- 模板文件中,外部JS引入前 -->
<script>
  // 直接输出Django变量,数字类型无需加引号
  window.is_empty = {{ is_empty }};
</script>
<!-- 引入你的外部JS文件 -->
<script src="{% static 'js/your-external-script.js' %}"></script>

然后在外部JS里直接使用:

if (window.is_empty === 1) {
  // 你的业务逻辑
}

为什么之前的写法失效?

你用var is_empty = "{{is_empty}}"会把数字包裹成字符串(渲染后为var is_empty = "1"),虽然后续Number()转换理论可行,但如果is_empty是布尔值(Django会渲染成"True"/"False"),或是模板渲染时带了多余空格,Number()转换后会得到NaN,导致判断失效。直接输出变量字面量就能避免这类问题。

方法2:修复data属性获取的null错误

你遇到的“无法对null调用getAttribute”,是因为JS代码执行时,目标div还没被浏览器解析渲染。有两种解决方式:

  1. 把外部JS放在body标签末尾,确保DOM加载完成后再执行:
<body>
  <!-- 页面内容 -->
  <div id="temp" data-dj="{{ is_empty }}"></div>
  
  <!-- 外部JS放在body最后 -->
  <script src="{% static 'js/your-external-script.js' %}"></script>
</body>
  1. 用DOM加载完成事件包裹代码:
    在外部JS文件里:
document.addEventListener('DOMContentLoaded', function() {
  const tempElement = document.getElementById('temp');
  // 用dataset获取data属性更简洁,同时转成数字
  const is_empty = parseInt(tempElement.dataset.dj, 10);
  
  if (is_empty === 1) {
    // 你的业务逻辑
  }
});

这样能保证代码在DOM完全加载后执行,不会出现找不到元素的情况。


内容的提问来源于stack exchange,提问作者dev-hd11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:16:05