【前提・実現したいこと】
正常にrunserverしてコンテンツを表示させたい!
DJANGO_SETTINGS_MODULE の設定がうまくいっていないところまではなんとなくわかるのですが、
その対策としくみがよくわからないので教えてください。
settings.pyを削除したままの状態で、どのように正常にrunserverしてコンテンツを表示させるのかを教えて頂きたいです。
【質問の内容】
とあるDjangoの講座ではじめてレクチャーを受けて、Python(Django)で簡単なブログアプリを作っています。
訳あって、settings.pyの内容の一部を dev.py、common.py、prod.py、heroku.py に切り取り分割後に、
settings.pyを削除したのですが、そのままrunserverすると、以下の様なエラーメッセージが発生しました。
※講師によると、settings.pyの内容の一部を切り取り分割する理由は、
本番環境と開発環境を切り分けるために、dev.pyや、common.pyや、prod.pyなどに分ける為とのことでした。
私もこの部分に関しては、講師の言われるがままに作業しているので、よくわかりません。
【注意点!】
- ローカル開発環境は、MacやLinuxではなく、Windows10を使用しています。
- settings.pyを削除前は、正常に表示されておりましたが、
settings.pyを削除後におかしくなりました。(当たり前っちゃ当たり前ですが)
- あくまでも、本質問の主旨としては、講義のレクチャーに沿った形で、settings.pyを削除したままの状態で、
どのように正常にrunserverしてコンテンツを表示させるのかを教えて頂きたいということです。
- 講師の方にも何度も質問しているのですが、講師の方は、根本的にMac環境を推奨しているので、
最終的には、私の環境では、対策には至りませんでした。
【発生している問題・エラーメッセージ】
【発生している問題】
エラーが発生してサーバーが起動出来ません。
【エラーメッセージ】 (microblog) C:\Users\%username%\!Udemy\djangomaster\microblog\microblog>python manage.py runserver ModuleNotFoundError: No module named 'microblog.settings' During handling of the above exception, another exception occurred: Traceback (most recent call last): ModuleNotFoundError: No module named 'microblog.settings' (microblog) C:\Users\%username%\!Udemy\djangomaster\microblog\microblog>
【環境フォルダ構成】
<< プロジェクトフォルダ >> ├─Include ├─Lib (( 一部省略 )) ├─microblog │ ├─assets │ │ ├─css │ │ ├─img │ │ ├─js │ │ └─vendor │ │ ├─bootstrap │ │ │ ├─css │ │ │ ├─fonts │ │ │ └─js │ │ ├─font-awesome │ │ │ ├─css │ │ │ ├─fonts │ │ │ ├─less │ │ │ └─scss │ │ └─jquery │ ├─blog │ │ ├─migrations │ │ │ └─__pycache__ │ │ ├─templates │ │ │ └─blog │ │ └─__pycache__ │ └─microblog │ └─__pycache__ ├─Scripts │ └─__pycache__ └─settings ←ココに注目!
【うまくいっていたときのsettingsフォルダ内のファイル構成】 └─settings settings.py urls.py wsgi.py settings.py ←ココに注目!(要はsettings.pyの有無の差) __init__.py
【うまくいっていないときのsettingsフォルダ内のファイル構成】 └─settings settings.py urls.py wsgi.py __init__.py
該当のソースコード
【消される前の元のsettings.pyの内容 (設定内容が一つにまとまったもの)】
Python
1 2【settings.pyの中身】 3 4
【切り取り分割した ファイル(common.py、dev.py、prod.py、heroku.py)】
Python
1【common.pyの中身】 2 3""" 4Django settings for microblog project. 5 6Generated by 'django-admin startproject' using Django 2.1.7. 7 8For more information on this file, see 9https://docs.djangoproject.com/en/2.1/topics/settings/ 10 11For the full list of settings and their values, see 12https://docs.djangoproject.com/en/2.1/ref/settings/ 13""" 14 15import os 16 17# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 18BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 19# プロジェクトのフォルダを表示する 20print(BASE_DIR) 21 22# Quick-start development settings - unsuitable for production 23# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/ 24 25# SECURITY WARNING: keep the secret key used in production secret! 26SECRET_KEY = 't$f44!o+qy_o3q*+v7zl(^*xzg9n19ezkxziikypfhdnap61%q' 27 28# Application definition 29 30INSTALLED_APPS = [ 31 'django.contrib.admin', 32 'django.contrib.auth', 33 'django.contrib.contenttypes', 34 'django.contrib.sessions', 35 'django.contrib.messages', 36 'django.contrib.staticfiles', 37 38 'blog', 39] 40 41MIDDLEWARE = [ 42 'django.middleware.security.SecurityMiddleware', 43 'django.contrib.sessions.middleware.SessionMiddleware', 44 'django.middleware.common.CommonMiddleware', 45 'django.middleware.csrf.CsrfViewMiddleware', 46 'django.contrib.auth.middleware.AuthenticationMiddleware', 47 'django.contrib.messages.middleware.MessageMiddleware', 48 'django.middleware.clickjacking.XFrameOptionsMiddleware', 49] 50 51ROOT_URLCONF = 'microblog.urls' 52 53TEMPLATES = [ 54 { 55 'BACKEND': 'django.template.backends.django.DjangoTemplates', 56 'DIRS': [], 57 'APP_DIRS': True, # False -> True 58 'OPTIONS': { 59 'context_processors': [ 60 'django.template.context_processors.debug', 61 'django.template.context_processors.request', 62 'django.contrib.auth.context_processors.auth', 63 'django.contrib.messages.context_processors.messages', 64 ], 65 }, 66 }, 67] 68 69WSGI_APPLICATION = 'microblog.wsgi.application' 70 71 72 73 74 75# Password validation 76# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators 77 78AUTH_PASSWORD_VALIDATORS = [ 79 { 80 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 81 }, 82 { 83 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 84 }, 85 { 86 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 87 }, 88 { 89 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 90 }, 91] 92 93 94# Internationalization 95# https://docs.djangoproject.com/en/2.1/topics/i18n/ 96 97LANGUAGE_CODE = 'ja' 98 99TIME_ZONE = 'UTC' 100 101USE_I18N = True 102 103USE_L10N = True 104 105USE_TZ = True 106 107 108# Static files (CSS, JavaScript, Images) 109# https://docs.djangoproject.com/en/2.1/howto/static-files/ 110 111STATIC_URL = '/static/' 112STATICFILES_DIRS = ( 113 # mac / : windows \ 114 os.path.normpath(os.path.join(BASE_DIR, "assets")), 115) 116 117LOGIN_REDIRECT_URL = '/' 118
Python
1【dev.pyの中身】 2 3from .common import * 4 5# SECURITY WARNING: don't run with debug turned on in production! 6DEBUG = True 7 8# Database 9# https://docs.djangoproject.com/en/2.1/ref/settings/#databases 10 11DATABASES = { 12 'default': { 13 'ENGINE': 'django.db.backends.sqlite3', 14 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 15 } 16} 17 18
Python
1【prod.pyの中身】 2 3from .common import * 4 5# SECURITY WARNING: don't run with debug turned on in production! 6DEBUG = False 7 8ALLOWED_HOSTS = ['*', ] 9 10# Database 11# https://docs.djangoproject.com/en/2.1/ref/settings/#databases 12 13DATABASES = { 14 'default': { 15 } 16} 17 18INSTALLED_APPS += ( 19 'gunicorn', 20) 21
Python
1【heroku.pyの中身】 2 3from .common import * 4 5# SECURITY WARNING: don't run with debug turned on in production! 6DEBUG = False 7 8ALLOWED_HOSTS = [] 9 10# Database 11# https://docs.djangoproject.com/en/2.1/ref/settings/#databases 12 13DATABASES = { 14 'default': { 15 } 16} 17
※settingsフォルダ内の init.py は、ファイルの中身は空です。
試したこと
問題切り分けの為に、settings.pyを切り取り分割する前に、事前にバックアップをとっておき、
その環境から、runserverしてみたところ、正常にrunserver出来ました!(コンテンツも正常に表示されております!)
それ故、settings.pyを切り取り分割したことが、直接的な問題であるといえます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。