【Django】django.core.exceptions.ImproperlyConfigured: The INSTALLED_APPS setting must be a list or a tuple.
【Django】django.core.exceptions.ImproperlyConfigured: The INSTALLED_APPS setting must be a list or a tuple.
先だってのDockerの問題解決の為、先にちゃんと動くDjangoプロジェクトを用意しようと動き出しました。
「まずは簡単な会員ログイン程度を用意して...」なんて思っていたのですが、開発サーバーRUNで思わぬ事態。
- NameError: name 'os' is not defined
- django.core.exceptions.ImproperlyConfigured: The INSTALLED_APPS setting must be a list or a tuple.
1つ目はOSってコマンドが無いんだなとすぐわかったのですが、2つ目が謎でした。
と言う事で、Djangoの初期設定について上手くいかなかったこの2点をまとめます。
ちなみに、私の環境はこんな感じです。
- Windows10 64Bit
- Python3.8 ※Windows開発アプリからインストール
- プロジェクト:django-admin startproject プロジェクト名 で作成
エラー:NameError: name 'os' is not defined
この解決は超簡単です。
書き加えるとこんな感じになります。
""" Django settings for app project. Generated by 'django-admin startproject' using Django 3.1.3. For more information on this file, seeFor the full list of settings and their values, seeDjango settings | Django documentation | Django
The web framework for perfectionists with deadlines.
""" import os from pathlib import PathSettings | Django documentation | Django
The web framework for perfectionists with deadlines.
たったこれだけで解決。
全部こんな感じだったらうれしかったのですが、私にとっては2つ目のエラーが難問でした。
The INSTALLED_APPS setting must be a list or a tuple.
直訳すれば【INSTALLED_APPS の設定はリストかタプルでなければなりません。】
プロジェクト名\プロジェクト名\settings.py のINSTALLED_APPSには次のように記載されています。
# Application definition
INSTALLED_APPS = {
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login.apps.LoginConfig',
}
Loginと言うアプリを作成してsettings.pyに登録したと言う場所。
エラーメッセージからここに問題があるのは理解できるけど、何が悪いのかが解らない。
ちなみに、書き加える前の状態は下の姿でした。
# Application definition
INSTALLED_APPS = {
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
}
で、やっとわかった正解は下の姿。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login.apps.LoginConfig',
]
【 { } 】で囲われている事が問題だったようです。
自動生成されたらそれが正しいと思うじゃんか!
そりゃね、正しいと思い込んでそこに注意行かないって!
Project作成の初期値で変えてほしかった...。
リスト型 or タプル型として判断してもらえる書き方
■ ()内にカンマ区切りでリストを配置する※最後のカンマを忘れない事
lists = ('list',)
■ []内にリストを配置する※複数ある場合はカンマ区切り
lists = ['list']
こんな書き方はNGとの事です。
lists = ('list')
この現象が起こるのはWindowsPCだけ?
Docker構成時に仮ページ作成のため【django-admin startproject プロジェクト名 】でプロジェクト作りました。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
こちらは 【[ ] (角カッコ)】で囲われてました。
まとめ
まさか自動生成のパーツに問題があるとは思いませんでした。
「こんな事もあるんだなぁ」といい勉強になりました。


