Django Girls Tutorial:ExtensionsでNoReverseMatchが出た時の対処法

Pocket

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をやっていて原因を見つけるのに時間がかかったので報告しておきます。

英語版をやっている人は問題ないです。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください