1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Django】今まで出てきたエラー集(エラー内容・発生タイミング・原因・解決方法・参考サイトを記載)

Last updated at Posted at 2021-12-21

##エラーリスト(※随時更新していきます)

###①django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'rest_framework.templatetags.rest_framework': No module named 'pytz'

####◆発生タイミング
python manage.py makemigrations実行時に発生。

####◆原因
models.pyに下記フィールドを設定。

models.py
created_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True)

DateTimeFieldを使用するにはサードパーティ製ライブラリのpytzを使用する必要がある。
このとき初めて仮想環境を駆使して開発していたため、ライブラリをインポートしていなかったのが原因。

####◆解決方法
pytzを仮想環境にインポート。
これで無事makemigrationsが通りました。

pip install pytz

####◆参考サイト

###②django.db.utils.OperationalError: could not translate host name "host" to address: Unknown host

####◆発生タイミング
python manage.py runserver実行時に発生。

####◆原因
開発用サーバーを立ち上げようとしたら、本番用のDB設定を参照しちゃったという事象でした。
下のコードは本番用のDB設定です。

settings.py
#herokuデプロイ用のDB設定
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'name',
        'USER': 'user',
        'PASSWORD': '',
        'HOST': 'host',
        'PORT': '',
    }
}

エラー内容はつまり、「hostなんて知らねえよ」ということですね。

####◆解決方法

元々は開発環境用のDB設定(sqlite)が施されていたのですが、herokuデプロイ時にsettings.pyからは外してあります。
なので、ここでは開発環境用のDBを設定させる必要があります。

しかしsettings.pyは本番環境用に設定されているので、今回はsettings.pyと同階層のフォルダ内に__local_settings.py__を作成し、そこに開発環境用のDB設定を書いていきます。

local_settings.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR + 'db.sqlite3',
    }
}

DEBUG = True

もちろんデバッグ設定もTrueにします。
そしてsettings.pyからlocal_settings.pyを読み込めるよう設定します。

settings.py
try:
    from .local_settings import *
except ImportError:
    pass

if not DEBUG:
    SECRET_KEY = os.environ['SECRET_KEY']
    import django_heroku
    django_heroku.settings(locals())

tryでlocal_settings.pyの全てを読み込もうとしています。
local_settings.pyはgitの追跡対象外としていますので、もし本場環境で読み込もうとしてもインポートエラーが発生します。
しかし特に何をするわけでもなく、passでスルーさせます。

そして開発環境じゃない場合、本番環境用のDB設定を参照する仕組みとしています。
local_settings.pyは忘れないよう、ちゃんと.gitignoreに追加しましょう。

これで問題なく開発用サーバーは立ちあがり、本番ではちゃんとheroku用のDB設定を参照していました。

####◆参考サイト

###③また新しいエラーが出たら追加します

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?