NoReverseMatch エラーとは何ですか? また、どうすれば修正できますか? 質問する

NoReverseMatch エラーとは何ですか? また、どうすれば修正できますか? 質問する

いくつかのコードを実行すると、NoReverseMatch がスローされ、次のように表示されます。

/my_url/ の NoReverseMatch 引数 '()' およびキーワード引数 '{}' を持つ 'my_url_name' の逆が見つかりません。n 個のパターンが試されました: []

これは何を意味するのでしょうか、また、どうすればいいのでしょうか?

ベストアンサー1

NoReverseMatchこのエラーは、インストールされたアプリの URL のいずれかで指定した URL に一致する URL パターンを Django が見つけられないことを示しています。

NoReverseMatch 例外は、指定されたパラメータに基づいて URLconf 内の一致する URL を識別できない場合に、django.core.urlresolvers によって発生します。

デバッグを開始するには、まず、表示されたエラー メッセージを分析する必要があります。

  • /my_url/ の NoReverseMatch

    これは現在レンダリングされているURLです。アプリケーションが現在アクセスしようとしているのはこのURLですが、一致しないURLが含まれています。

  • 'my_url_name' の逆順

    これは見つけられないURLの名前です

  • 引数 '()' と

    これらはURLに提供される非キーワード引数です

  • キーワード引数 '{}' が見つかりません。

    これらはURLに提供されるキーワード引数です

  • 試したパターン数: []

    これらは、urls.pyファイル内で一致しようとして見つかったパターンです。

まず、現在レンダリングされている URL に関連するソース内のコード (URL、ビュー、関連するテンプレート) を見つけます。ほとんどの場合、これは現在開発中のコードの一部になります。

これを実行したら、 の URL を構築しようとしているコード行に到達するまで、Django が実行する順序でコードを読み進めますmy_url_name。これも、おそらく最近変更した場所にあります。

エラーが発生している場所がわかったので、エラー メッセージの他の部分を使用して問題を解決します。

URL名

  • 誤字脱字はありますか?
  • 指定された名前にアクセスしようとしている URL を提供しましたか?
  • アプリの で app_name を設定した場合urls.py(例: app_name = 'my_app')、または名前空間を使用してアプリを含めた場合 (例: include('myapp.urls', namespace='myapp'))、リバース時に名前空間を含める必要があります (例:{% url 'myapp:my_url_name' %}またはreverse('myapp:my_url_name'))。
  • URL 名を引用符で囲むのを忘れて、{% url my_url_name %}の代わりにのようなことを書いていませんか{% url 'my_url_name' %}?

引数とキーワード引数

()引数とキーワード引数は、 URL パターン内の囲み括弧によって識別できる、指定された URL 内に存在するキャプチャ グループと照合するために使用されます。

一致させる URL に追加の引数が必要であると仮定すると、エラー メッセージを確認し、まず指定された引数の値が正しいかどうかを確認します。

正しくない場合は、次の手順に従ってください。

  • 値が欠落しているか、空の文字列です

    これは通常、渡そうとしている値に期待する値が含まれていないことを意味します。値を割り当てる場所を確認し、ブレークポイントを設定して、この値が正しく渡されない理由を突き止める必要があります。

  • キーワード引数にタイプミスがあります

    URL パターンまたは構築している URL のいずれかでこれを修正してください。

正しい場合:

  • 正規表現をデバッグする

    次のようなウェブサイトを利用できます。正規表現パターンが作成しようとしている URL と一致するかどうかをすばやくテストするには、URL パターンを上部の正規表現フィールドにコピーし、テキスト領域を使用して、一致すると思われる URL を含めます。

    よくある間違い:

    • .ワイルドカード文字またはその他の正規表現文字とのマッチング

      特定の文字を\プレフィックスでエスケープすることを忘れないでください

    • 小文字/大文字のみに一致

      またはの代わりに、a-Zまたはのいずれかを使用してください。\wa-zA-Z

  • マッチングするパターンが、試したパターンに含まれているか確認します

    ここにない場合は、INSTALLED_APPS設定内にアプリを含めることを忘れた可能性があります(または、アプリの順序をINSTALLED_APPS確認する必要があるかもしれません)。

Django バージョン

Django 1.10 では、Python パスで URL を逆順にする機能が削除されました。代わりに名前付きパスを使用する必要があります。


それでも問題を追跡できない場合は、試したこと、調べたこと (この質問にリンクできます) を含む新しい質問を自由に作成し、問題に関連するコード (一致している URL、関連する URL パターン、Django が一致しようとした内容を示すエラー メッセージの部分、および該当する場合は設定) を含めてくださいINSTALLED_APPS

おすすめ記事