質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1146閲覧

【Django3】settings.pyの分割ができない。(開発用と本番用の分割ができない)

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/04/09 06:59

編集2021/04/09 07:03

こんにちは。
「動かして学ぶ!Python Django 開発入門」を学習中にsettings.pyを分割するところでつまってしまいました。

よろしければお力をお貸ししていただけないでしょうか?

前提・実現したいこと

Djangoにて参照する設定ファイルを
プロジェクト(private_diary)直下にある「settings.py」から、
新規で作成した「settings」ディレクトリに格納した「settings_dev.py」へと変更すること

【前提】
もともとあった「settings.py」は、
開発と本番の共通部分:「settings_common.py」
開発のみの部分:「settings_dev.py」
に分割しています。

フォルダ階層は以下のようになります。

├─private_diary │ │ db.sqlite3 │ │ manage.py │ │ │ ├─diary #アプリ └─private_diary ├─settings.py ├─settings │ settings_common.py └─ settings_dev.py

発生している問題・エラーメッセージ

ValueError: dictionary update sequence element #0 has length 5; 2 is required

該当のソースコード

setthings_common.py

python

1""" 2Django settings for private_diary project. 3 4Generated by 'django-admin startproject' using Django 3.2. 5 6For more information on this file, see 7https://docs.djangoproject.com/en/3.2/topics/settings/ 8 9For the full list of settings and their values, see 10https://docs.djangoproject.com/en/3.2/ref/settings/ 11""" 12 13from pathlib import Path 14import os 15 16# Build paths inside the project like this: BASE_DIR / 'subdir'. 17BASE_DIR = Path(__file__).resolve().parent.parent 18 19 20# Quick-start development settings - unsuitable for production 21# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ 22 23# SECURITY WARNING: keep the secret key used in production secret! 24SECRET_KEY = 'django-insecure-x6p&u9#tbt4ne==gbnrxofky4ktdhm^3&u(yf6nht4pq1r)y4m' 25 26# Application definition 27 28INSTALLED_APPS = [ 29 'django.contrib.admin', 30 'django.contrib.auth', 31 'django.contrib.contenttypes', 32 'django.contrib.sessions', 33 'django.contrib.messages', 34 'django.contrib.staticfiles', 35 "diary", 36] 37 38MIDDLEWARE = [ 39 'django.middleware.security.SecurityMiddleware', 40 "whitenoise.middleware.WhiteNoiseMiddleware", 41 'django.middleware.security.SecurityMiddleware', 42 'django.contrib.sessions.middleware.SessionMiddleware', 43 'django.middleware.common.CommonMiddleware', 44 'django.middleware.csrf.CsrfViewMiddleware', 45 'django.contrib.auth.middleware.AuthenticationMiddleware', 46 'django.contrib.messages.middleware.MessageMiddleware', 47 'django.middleware.clickjacking.XFrameOptionsMiddleware', 48] 49 50ROOT_URLCONF = 'private_diary.urls' 51 52TEMPLATES = [ 53 { 54 'BACKEND': 'django.template.backends.django.DjangoTemplates', 55 'DIRS': [], 56 'APP_DIRS': True, 57 'OPTIONS': { 58 'context_processors': [ 59 'django.template.context_processors.debug', 60 'django.template.context_processors.request', 61 'django.contrib.auth.context_processors.auth', 62 'django.contrib.messages.context_processors.messages', 63 ], 64 }, 65 }, 66] 67 68WSGI_APPLICATION = 'private_diary.wsgi.application' 69 70 71# Database 72# https://docs.djangoproject.com/en/3.2/ref/settings/#databases 73 74DATABASES = { 75 'default': { 76 'ENGINE': 'django.db.backends.sqlite3', 77 'NAME': BASE_DIR / 'db.sqlite3', 78 } 79} 80 81 82# Password validation 83# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators 84 85AUTH_PASSWORD_VALIDATORS = [ 86 { 87 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 88 }, 89 { 90 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 91 }, 92 { 93 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 94 }, 95 { 96 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 97 }, 98] 99 100 101# Internationalization 102# https://docs.djangoproject.com/en/3.2/topics/i18n/ 103 104LANGUAGE_CODE = 'ja' 105 106TIME_ZONE = 'Asia/Tokyo' 107 108USE_I18N = True 109 110USE_L10N = True 111 112USE_TZ = True 113 114 115# Static files (CSS, JavaScript, Images) 116# https://docs.djangoproject.com/en/3.2/howto/static-files/ 117 118STATIC_URL = '/static/' 119 120# Default primary key field type 121# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field 122 123DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 124 125STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") 126STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" 127 128# STATICFILES_DIRS = ( 129# os.path.join(BASE_DIR, "static") 130# )

settings_dev.py

python

1from .settings_common import * 2 3# SECURITY WARNING: don't run with debug turned on in production! 4DEBUG = True 5 6ALLOWED_HOSTS = [] 7 8# logging 9LOGGING = { 10 "version": 1, 11 "disable_existing_loggers": False, 12 13 # logger 14 "loggers": { 15 "django": { 16 "handlers": ["console"], 17 "level": "INFO", 18 }, 19 "diary": { 20 "handlers": ["console"], 21 "level": "DEBUG", 22 }, 23 }, 24 "handlers": { 25 "console": { 26 "level": "DEBUG", 27 "class": "logging.StreamHandler", 28 "formatter": "dev" 29 }, 30 }, 31 32 "formatters": { 33 "dev": { 34 "format": "\t".join([ 35 "%(asctime)s", 36 "[%(levelname)s]", 37 "%(pathname)s(Line:%(lineno)d)", 38 "%(message)s" 39 ]) 40 }, 41 } 42}, 43 44EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"

試したこと

settings.pyを削除後、
1.settings.pyを参照するよう記述されている箇所の編集
2.python manage.py runserverの実行時のコマンドにオプションを追加
上記2点を試みてみました。

【1の場合】
こちらを参照してみました。
修正は以下のように行いました。
private_diary/settings/settings_common.py

python

1# BASE_DIR = Path(__file__).resolve().parent.parent を以下に編集 2BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 3

manage.py

python

1def main(): 2 """Run administrative tasks.""" 3 # os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'private_diary.settings') を 4 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'private_diary.settings.settings_dev') 5

→結果以下のようなエラーコードになりました。

TypeError: unsupported operand type(s) for /: 'str' and 'str'

【2の場合】
オプションを追加した結果

ValueError: dictionary update sequence element #0 has length 5; 2 is required

このようなエラーがでました。

補足情報(FW/ツールのバージョンなど)

Django 3.2
Python 3.9.1
VScode 1.55.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問