python - 在所有 Django 应用程序启动后如何调用函数
问题描述
我想加载一些我放在一个模块中的类,这些类不属于settings.INSTALLED_APPS
列表的一部分。(我希望我的客户能够编写他们自己的子类,这些子类可以动态加载或重新加载。)我有一个调用函数load_classes()
来执行此操作。问题是当我的项目最初开始时在哪里调用它。
我对此的第一次尝试是根据这个问题load_classes
放置在ready()
函数中,但显然只有在完成加载的特定应用程序之后才会调用,而不是全部。由于这些类定义从项目中的其他应用程序导入模型和函数,我最终得到了这个错误:AppConfig
AppConfig
File "/Users/dylan/.local/share/virtualenvs/pipeproj-oDyHbVBN/lib/python3.8/site-packages/django/apps/registry.py", line 135, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
我在哪里可以放置我的导入代码,以便在加载所有 Django 应用程序后触发它?
解决方案
Willem Van Onsem 的评论促使我查看apps.py
我调用该ready
函数的整个文件。虽然我使用的是动态加载,但我在文件顶部importlib.import_module
有另一个完全独立的文件,它利用了其他应用程序。import
一旦我把它拿出来,我就克服了错误。
AppConfig.ready
所以教训是,在调用中包含对其他应用程序的所有依赖项。谢谢,威廉!
推荐阅读
- html - 导航栏与标题重叠,框阴影不显示,无法更改 h1 字体大小
- javascript - 如何仅从Javascript中的完整路径中提取文件名+扩展名?
- ssh - 如何通过 ssh 连接到服务器上的特定计算机?
- ios - SwiftUI View 入门代码在添加到现有项目时抱怨“从非协议类型 'View' 继承”
- ipfs - 同一文件的 CID 是否不同但由 IPFS 中的 2 个用户上传?
- c - Visual Studio Code:参数未传递给 C 命令行应用程序
- raspberry-pi - 为什么我的输入源在发送时没有改变
通过 CEC 客户端发送消息? - couchdb - 使用 couchdb 超级账本结构时加入对等通道时出错
- sbt - sbt-native-packager Inellij 中的未知工件
- javascript - 从 blob url 下载 video.mp4