Djangoでアプリ作成時に起きたエラーと原因メモ
Djangoでアプリを作る際に、通常は以下のようにしてプロジェクトを作成し、
その後 settings.py
にアプリを追記しますよね。
django-admin startproject プロジェクト名
python manage.py startapp アプリ名
そして settings.py
の INSTALLED_APPS
に、作成したアプリを以下のように追加します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'~~~' # ←ここに startapp で作ったアプリ名を追加する
]
やらかし:先に settings.py
に書いてしまう
startappコマンドを実行する前に、先に settings.py
にアプリ名を追記してしまいました。
どうせ後で作るしなと思って...
すると、startapp
コマンド実行時に以下のようなエラーが発生しました。
arunbababa@Arunbababa:~/Dev/todoapp$ python3 manage.py startapp todoapp
Traceback (most recent call last):
File "/home/arunbababa/Dev/udemy/todoapp/manage.py", line 22, in <module>
main()
File "/home/arunbababa/Dev/udemy/todoapp/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/arunbababa/.local/lib/python3.10/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
utility.execute()
...
ModuleNotFoundError: No module named '先に設定してしまったアプリ名'
考察:なぜこのエラーが出たのか?
エラーメッセージを読む限り、startapp
実行時に
すでに settings.py
に記載されたアプリ名のモジュールがインポートされようとしている。
でもそのアプリはまだ startapp
で作ってないから、モジュールが存在せず ModuleNotFoundError
が出る。
つまり、
-
startapp
実行時にsettings.py
が評価される -
INSTALLED_APPS
にまだ存在しないアプリを記載していると、インポートエラーになる
という流れ。
対処法:あわてず順番を守ろう
その後、いったん settings.py
に書いていたアプリ設定を削除してから
改めて startapp
を実行したところ、正常にアプリを作成できました。
先に startapp
→ 後で settings.py
に追加。