こんにちは、ミナピピン(@python_mllover)です!
MentaでPython Django 超入門 を参考にDjangoでのSNSアプリの製作をメンターしていた際に遭遇したエラー、関数の最後にreturn render(requets,, ‘~~~.html’)で戻り値を設定しているにも関わらず、「ValueError didn’t return an HttpResponse object. It returned None instead.」が出るという相談を受けました。
エラーメッセージを表面的に見る限り、viewの中でHttpレスポンスオブジェクトを返していないことが原因です。djangoは必ずHttpリクエストを受け取り、Httpレスポンスを返さなければいけません。
しかし、コードをみるとreturn render(requets,, ‘~~~.html’)は記載されています。なのに、「ValueError didn’t return an HttpResponse object. It returned None instead.」というエラーメッセージが表示されていました。
何が原因なのか調査した結果、真の原因はインデントがずれていたことでif文の下にreturn render(requets,, ‘~~~.html’)が来ており、if文の条件がFalseだった際にレンダリング処理が実行されていなかったことです。
というわけでインデントを参考書通りに直すことでGETでもPOSTでもreturn render(requets,, ‘~~~.html’)の部分が実行され、ページが表示されるようになりました。同じようなエラーに遭遇している方は参考書通りにインデントが揃っているか一度よく確認してみてください。参考書を写経するときはインデントもちゃんと揃えるように気を付けないとダメですね、というお話でした。
参照:https://teratail.com/questions/173758
コメント