NoReverseMatchエラーの対処方【具体的に解説】


djangoでnoReverseMatchエラーが出たけど、対処方法が分からない。

この記事はそのような方に向けて作りました。
NoReverseMatchエラーってそもそも何?

まず、NoReverseMatchエラーについて理解していきましょう。

このエラーを理解するためには、まずReverseについて理解していることが好ましいです。
NoReverseMatchエラーは、提供されたパラメータをもとにviewを呼び出そうとした一方、パラーメータに合うviewがなかったことからエラーになってしまったというものです。
この前提をもとに、エラーの対処方法について学んでいきましょう。
urlpatternを確認

まずは、reverseで指定したパラメーターとurlpattenrが合致しているかを確認していきましょう。

例えば、reverseが以下のようなコードだったとします。


[コード]

reverse('home')

その上で、urlpatternsをみていきましょう。


[コード]

urlpatterns = [
    path('homepage/', homefunction, name='home2')
]

このように、name='home2'となっている場合は、homeとhome2が合致しないのでエラーが出てしまいます。
引数がある場合に注意

また、NoReverseMatchエラーが発生する原因の一つとして、引数を適切に与えていないということが挙げられます。


例えば、以下のようなurlpatternがあったとしましょう。
urlpatterns = [
    path('homepage/<int:pk>', homefunction, name='home2')
] [/python]
これは、urlに引数としてprimary keyを取るように設定しているものです。
このurlに引数を持たせるということが良くわからないという方は、urlpatternの使い方を詳しく解説【保存版】という記事を参考にしてください。

この時、reverseを使うためには、引数を設定しなければいけません。具体的には、以下のような形でコードを書いていく必要があります。


[コード]

reverse('home', args=[pk] )

また、キーワード引数を取ることもできます。


[コード]

reverse('home', kargs={'pk':pk} )

ここでのpkというのは、呼び出したモデルの中に入っているデータのprimary keyのことです。

アプリの名前を指定している場合も注意

また、アプリの名前を指定している場合も注意が必要です。

例えば、some_appというアプリ名を指定している場合、このアプリのurlを指定して呼び出すために、以下のような指定をしなければいけません。


[コード]

reverse('some_app:home', args=[pk] )

意外と忘れがちな部分でもありますので、頭の片隅にいれておくと良いでしょう。

NoReverseMatchエラーのまとめ



(1) まずはurlpatternを確認

(2) 次に引数を確認

(3) 最後にアプリの名前を確認

~Django無料講義~のご案内


Code for Djangoが、4時間超の無料Django講義をはじめました
 
・本を出版したCode for Djangoの
 製作者が作ったサイトです。
 
・Code for Djangoの内容も、
 動画で詳しく解説しています。
 
・動画は順次ふやしていきますので、
 ただで学び続けることが可能です。
 
・Djangoの効率的なスキルアップに、
 是非お役立て下さい。

                                                                 Django講義はこち


Created with