Django项目单页面报Uncaught ReferenceError: $ is not defined求助
以下是几种常见的导致该报错的原因:
自定义代码执行顺序早于jQuery加载
如果base.html中把jQuery的<script>标签放在了页面底部(比如</body>标签前),而你在子模板里的jQuery代码放在了<head>区域或者比jQuery脚本更早的位置,就会出现代码执行时jQuery还未加载完成的情况,自然找不到$变量。子模板覆盖了base中的脚本块且未继承原有内容
若base.html中是通过模板块(比如{% block scripts %})来引入jQuery,而你在出现问题的子模板里重写了这个块,但没有添加{{ block.super }},就会把base里的jQuery引入代码覆盖掉,导致该页面根本没加载jQuery。jQuery CDN加载失败
虽然其他页面正常,但该页面可能因网络波动、浏览器缓存异常或CDN域名被拦截等原因,导致jQuery脚本加载失败。可以打开浏览器开发者工具的「Network」标签,查看该jQuery请求的状态码,确认是否成功加载(正常状态码为200)。页面存在其他脚本冲突
如果页面中引入了其他同样使用$作为全局变量的库(比如Prototype、Zepto),会覆盖jQuery的$变量。此时可以把你的代码改成jQuery(document).ready(function(){ console.log("hello") })测试,如果能正常执行,就说明是变量冲突问题。模板块位置错误
若你在子模板中把自定义脚本放在了错误的模板块里,导致渲染后脚本的位置早于jQuery的引入位置,也会触发该报错。比如base里的jQuery在{% block bottom_scripts %}中,而子模板把自己的代码放在了{% block head %}里。
内容的提问来源于stack exchange,提问作者Ilian Gion Häsler

