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

引入AngularJS 1.5.5至Django项目遇[$injector:modulerr]错误求助

解决AngularJS 1.5.5 [$injector:nomod] 模块'public'不存在的错误

你遇到的这个问题其实很典型——AngularJS启动时发现页面里指定了要加载public模块,但这个模块根本没被定义。结合你说的“负责的页面原本无Angular代码”,大概率是Django的父模板(比如base.html)里已经全局添加了ng-app="public"指令,或者你不小心在当前页面的某个标签上带了这个配置,自己没注意到。

下面给你几个针对性的解决方案,你可以根据实际情况选择:

方案1:移除不需要的ng-app指令

如果你的页面暂时不需要绑定Angular模块,或者打算自己定义新模块,直接找到页面中(包括父模板里)带有ng-app="public"的标签,做以下调整:

  • 要么去掉模块名,使用Angular的默认空模块:ng-app
  • 要么直接删除整个ng-app属性,等你准备好自己的模块后再添加

方案2:定义public模块

如果项目里其他页面依赖public模块,或者父模板的配置不能修改,你只需要在引入Angular核心脚本之后,添加一段模块定义代码即可:

<script src="/static/angular/1.5.5/angular.min.js"></script>
<!-- 新增这段代码定义public模块 -->
<script>
  // 第二个空数组是模块依赖,暂时不需要依赖就留空
  angular.module('public', []);
</script>

你也可以把这段代码放到单独的app.js文件里,再通过<script src="/static/js/app.js"></script>引入,这样代码结构更清晰。

额外提醒

在Django模板继承的场景下,一定要注意父模板的全局配置——很多时候父模板会把ng-app加到根标签上,子页面继承后就会自动带上,很容易被忽略。如果父模板的ng-app="public"是给其他页面用的,你可以在当前页面的根标签上重新添加ng-app(不带模块名或者你自己的模块名),覆盖父模板的设置。

我之前在Django+Angular的项目里也踩过这个坑,模板继承的隐式配置真的很容易让人摸不着头脑,希望这些方法能帮你快速解决问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:23:13