Django静态JS请求返回304但模板页面效果不显示问题咨询
Django模板页ProgressBar进度条不生效排查指引
你当前静态资源配置无问题,304状态码仅代表浏览器缓存命中、JS文件请求成功,不代表JS代码能正常执行,按以下优先级排查:
- 首先打开浏览器F12开发者工具,切到Console面板看红色报错信息,前端JS执行错误不会输出到Django后端日志,所有前端执行问题优先看控制台报错。
高频故障点1:缺失依赖/变量未定义
你代码中直接调用ProgressBar.Circle是第三方库progressbar.js的API,未引入该库会直接报ProgressBar is not defined错误,JS执行直接中断。
另外你的代码中直接使用container变量,没有先获取DOM节点,会直接报container is not defined错误。
修复方式:
- 将progressbar.js库文件放到项目static目录下,在模板中按「先依赖、后自定义代码」的顺序引入
- 初始化进度条前先获取容器节点,修正后的JS代码结构:
document.addEventListener('DOMContentLoaded', function() { // 先获取容器节点,DOM加载完成后再执行初始化 const container = document.getElementById('container'); if (!container) return; const bar = new ProgressBar.Circle(container, { color: '#ff0000', // 最大宽度需和容器匹配避免裁切 strokeWidth: 4, trailWidth: 1, easing: 'easeInOut', duration: 10000, text: { autoStyleContainer: false }, from: { color: '#ff0000', width: 5 }, to: { color: '#00cc00', width: 9 }, step: function(state, circle) { circle.path.setAttribute('stroke', state.color); circle.path.setAttribute('stroke-width', state.width); const value = Math.round(circle.value() * 100); circle.setText(value === 0 ? '' : value); } }); bar.text.style.fontFamily = '"Raleway", Helvetica, sans-serif'; bar.text.style.fontSize = '2rem'; bar.animate(1.0); })
高频故障点2:静态资源引入方式/加载顺序错误
不要在Django模板中写死静态资源路径,必须用模板标签引入,避免路径匹配异常、缓存旧版本代码问题:
- 模板文件最顶部第一行添加
{% load static %} - 脚本标签放到容器节点之后、
</body>标签之前,保证DOM渲染完成后再加载执行JS:
<!-- 页面内容 --> <div id="container"></div> <!-- 脚本放在body末尾 --> <script src="{% static 'js/progressbar.min.js' %}"></script> <script src="{% static 'js/script.js' %}"></script>
排查时在开发者工具Network面板勾选Disable cache,强制刷新页面绕过本地缓存,避免加载到旧版本的错误JS文件。
高频故障点3:容器节点样式异常
ProgressBar生成的SVG会撑满父容器,如果#container节点被设置为display: none、宽高为0、被其他元素遮挡,就算JS执行成功也看不到效果,可以先给容器加基础测试样式:
#container { width: 200px; height: 200px; margin: 2rem auto; }
内容的提问来源于stack exchange,提问作者user19125298
相关产品推荐
相关产品推荐

