こんにちは。
「動かして学ぶ!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
あなたの回答
tips
プレビュー