Django应用中新增自定义模块无法识别的问题咨询
解决Django应用中导入同目录模块的问题
嘿,作为Django新手遇到这个导入问题太正常了,别慌——你的代码拆分思路完全没问题,只是导入的方式没找对而已!
为什么会报错?
当你在views.py里直接写import main时,Python会在系统默认路径和项目根目录下查找名为main的模块,但你的main.py和views.py在同一个应用文件夹(my-app/)里,属于同一层级的模块,这种场景需要用相对导入或者带应用名的绝对导入,而不是直接import。
正确的导入方法
根据你的文件结构:
my-app/ ├─ views.py └─ main.py
你有两种简单的解决方式:
相对导入:在
views.py里使用当前目录的相对路径导入from . import main这里的
.代表当前模块所在的目录(也就是my-app/),Python会精准找到同目录下的main.py。绝对导入:用你的应用名称作为前缀导入(注意如果应用名里有横杠,要换成下划线,比如
my-app要写成my_app)from my_app import main这种方式更清晰,尤其当项目结构复杂时,不容易混淆模块位置。
更规范的代码拆分方案(可选)
如果后续你的应用代码越来越多,推荐把相关功能的文件放到子包中,让结构更清晰:
- 在
my-app/下创建一个子文件夹,比如utils或者core - 在子文件夹里创建
__init__.py(Python3.3+可以省略,但加上更符合传统包规范) - 把
main.py放到这个子文件夹里,结构变成:my-app/ ├─ views.py └─ utils/ ├─ __init__.py └─ main.py - 导入时就可以写成:
这种方式能更好地归类代码,避免根目录文件过多。from my_app.utils import main
放心,Django完全支持这种代码拆分方式,这样能让你的views.py保持简洁,专注于处理请求逻辑,是非常好的实践哦!
内容的提问来源于stack exchange,提问作者Francesco Urdih
相关产品推荐
相关产品推荐

