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

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

    この記事はそのような方に向けて作りました。

    NoReverseMatchエラーってそもそも何?

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

    このエラーを理解するためには、まずReverseについて理解していることが好ましいです。

    Reverseの概要については、reverseの考え方について分かりやすく解説【具体的に説明します】という記事や、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の効率的なスキルアップに、
       是非お役立て下さい。