【Django】django.core.exceptions.ImproperlyConfigured: The INSTALLED_APPS setting must be a list or a tuple.
- 2020.11.12
- Python備忘録
- Django, django-admin, list, python, settings.py, 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
この解決は超簡単です。
書き加えるとこんな感じになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
""" Django settings for app project. Generated by 'django-admin startproject' using Django 3.1.3. For more information on this file, see https://docs.djangoproject.com/en/3.1/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/3.1/ref/settings/ """ import os from pathlib import Path |
たったこれだけで解決。
全部こんな感じだったらうれしかったのですが、私にとっては2つ目のエラーが難問でした。
The INSTALLED_APPS setting must be a list or a tuple.
直訳すれば【INSTALLED_APPS の設定はリストかタプルでなければなりません。】
プロジェクト名\プロジェクト名\settings.py のINSTALLED_APPSには次のように記載されています。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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に登録したと言う場所。
エラーメッセージからここに問題があるのは理解できるけど、何が悪いのかが解らない。
ちなみに、書き加える前の状態は下の姿でした。
1 2 3 4 5 6 7 8 9 10 |
# Application definition INSTALLED_APPS = { 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', } |
で、やっとわかった正解は下の姿。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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 タプル型として判断してもらえる書き方
■ ()内にカンマ区切りでリストを配置する※最後のカンマを忘れない事
1 |
lists = ('list',) |
■ []内にリストを配置する※複数ある場合はカンマ区切り
1 |
lists = ['list'] |
こんな書き方はNGとの事です。
1 |
lists = ('list') |
この現象が起こるのはWindowsPCだけ?
Docker構成時に仮ページ作成のため【django-admin startproject プロジェクト名 】でプロジェクト作りました。
1 2 3 4 5 6 7 8 9 10 |
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] |
こちらは 【[ ] (角カッコ)】で囲われてました。
まとめ
まさか自動生成のパーツに問題があるとは思いませんでした。
「こんな事もあるんだなぁ」といい勉強になりました。
-
前の記事
【Docker】画面表示しない時に見る場所『Python×Django×Nginx×MySQL』 2020.11.11
-
次の記事
Laravel 使いが Django を触って思った感覚的違和感と混乱したパートについて 2020.11.13