【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で思わぬ事態。

  1. NameError: name 'os' is not defined
  2. 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

この解決は超簡単です。

プロジェクト名\プロジェクト名\settings.py の最初に【import os】を書き加える

書き加えるとこんな感じになります。

"""
Django settings for app project.

Generated by 'django-admin startproject' using Django 3.1.3.

For more information on this file, see
			
Django settings | Django documentation | Django

The web framework for perfectionists with deadlines.

For the full list of settings and their values, see
Settings | Django documentation | Django

The web framework for perfectionists with deadlines.

""" import os from pathlib import Path

たったこれだけで解決。
全部こんな感じだったらうれしかったのですが、私にとっては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',
]

こちらは 【[ ] (角カッコ)】で囲われてました。

まとめ

まさか自動生成のパーツに問題があるとは思いませんでした。
「こんな事もあるんだなぁ」といい勉強になりました。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください