質問: お世話になります。以下にご質問させてください。 djangoのバージョンは3.1.7です。 ### 達成したいこと 404エラーとなる際にカスタマイズした404.htmlが表示されるようにしたい。 ### これまでに実施した内容 * views.py にて `get_object_or_404` で404エラーを返すようにしている。 * ルートディレクトリ内に新しくtemplatesを作成。その中に404.htmlを作成。 * settings.py に `import os` を追記("os is not defined." となるため) * settings.py - TEMPLATES - 'DIRS' に `os.path.join(BASE_DIR, 'templates')` を追加 ### 上記内容の実施結果 デフォルトの404エラーのページが表示されるのみ。 カスタマイズした404のページが表示されない。
回答: Windows10のdjango 3.1.7上で、末尾のpowershellスクリプトを実行して動作確認したところ、正しくカスタム404が表示されました。 下記の設定にお間違えがないかをご確認ください。 * `manage.py`と同階層に`templates`フォルダを作っている * `settings.py`を`DEBUG = False`に切り替えている (デバッグモードでは強制的に詳細なエラーメッセージが表示されます) ※手順が冗長になるので割愛しましたが、polls.pyを作成して`get_object_or_404`を呼び出しても設定を間違えなければカスタム404が表示されることを確認しました。 powershellスクリプト: ``` # C:\django にプロジェクトページを新規作成 $django = "C:\django" if(-not (Test-Path $django)) { mkdir $django } cd $django #rm -r mysite django-admin startproject mysite # テンプレート作成 cd $django\mysite\ mkdir templates "Hello 404." | Out-File ".\templates\404.html" -Encoding default # settings.pyを置換 cd .\mysite\ $settings = Get-Content settings.py $settings = $settings -replace "'DIRS': \[\],", "'DIRS': [os.path.join(BASE_DIR, 'templates')]," $settings = $settings -replace "import Path", "import Path`r`nimport os" # デバッグモードでは 404.html を読みこまないので本番モードに変更 $settings = $settings -replace "DEBUG = True", "DEBUG = False" $settings = $settings -replace "ALLOWED_HOSTS = \[\]", "ALLOWED_HOSTS = ['127.0.0.1']" # 上書き保存 $settings | Out-File ".\settings.py" -Encoding default # 実行 cd $django\mysite\ start "python" -ArgumentList "manage.py", "runserver" -PassThru start "http://127.0.0.1:8000/polls/" ```