***本記事にはプロモーションが含まれています。***
Django Girls TutorialでDjango Girls Tutorail:ExtensionsのHomework: add more to your website!をやっていた時のこと。
Delete postという項目でpost_remove()という関数を作ってブログを削除するボタンを作りました。
でも、記事の削除はできるのですが、次のようなエラーになりブログのトップに戻りません。
NoReverseMatch at /post/24/remove/ Reverse for 'post_list' not found. 'post_list' is not a valid view function or pattern name.
実は、Django Girls Tutorial:ExtensionsはTutorial本体とはバージョンが違っていて、urls.pyの指定が間違っていました。blog/urls.pyのurlの指定のところで下のようにname='post_list'を付け加えないといけませんでした。
blog/urls.pyの変更前
urlpatterns = [ url(r'^$', views.post_list), ]
blog/urls.pyの変更後
urlpatterns = [ url(r'^$', views.post_list, name='post_list'), ]
views.pyファイルの中のredirect('post_list')で指定する値は、urlのnameの値になります。
nameに指定してあるから、redirectを呼んだ時urlがブログのトップページ'/'だとわかり、views.post_list関数が呼ばれます。
日本語版のTutorialをやったあとExtensionsをやっていて原因を見つけるのに時間がかかったので報告しておきます。
英語版をやっている人は問題ないです。