3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】djangoでアプリ作る前にsettingsに書いちゃうとstartprojectできないよ

Posted at

Djangoでアプリ作成時に起きたエラーと原因メモ

Djangoでアプリを作る際に、通常は以下のようにしてプロジェクトを作成し、
その後 settings.py にアプリを追記しますよね。

django-admin startproject プロジェクト名
python manage.py startapp アプリ名

そして settings.pyINSTALLED_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 に追加。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?