728x90
문제 발생
원래 Django에서는 app 디렉토리 내의 views.py 파일에 뷰 함수나 클래스를 작성한다. 하지만 나 같은 경우 views.py 파일이 복잡해져 파일로 분리해 작성하고 싶었다. 이 오류는 분리한 파일을 폴더로 생성하고 폴더 내부에 파일들을 생성해 다른 파일에서 해당 뷰를 import 할 때 난 오류이다.
원인
기존의 views.py 파일과 새로 생성한 디렉토리 이름 간의 이름 충돌이 발생한 것이다. 예를 들어, 기존의 views.py 파일과 myapp/views 디렉토리에 새로 생성한 main.py 파일이 존재하는 경우, from . import views와 같은 import 구문이 views 파일인지 views 폴더인지 어떤 것을 참조해야 하는지 알 수 없기 때문에, ModuleNotFoundError: No module named 'apps.views.main'; 'apps.views' is not a package와 같은 에러가 발생한다.
해결
기존 views.py 파일명을 내맘대로 바꿀 수는 없기 때문에 views 디렉토리에 __init__.py 파일을 추가해 패키지로 인식시켜 주어 Django가 해당 폴더를 모듈로 인식하고 모듈 이름 충돌을 방지할 수 있었다.
views/
__init__.py
main.py
views.py
728x90
반응형