回答:
NoReverseMatch
エラーは、Djangoは、あなたのインストールアプリのURLのいずれかで提供しましたURLの一致URLパターンを見つけることができないと言っています。
NoReverseMatch例外は、提供されたパラメーターに基づいてURLconf内の一致するURLを識別できない場合、django.core.urlresolversによって発生します。
デバッグを開始するには、表示されたエラーメッセージを分析することから始める必要があります。
/ my_url /のNoReverseMatch
これは、現在レンダリングされているURLです。アプリケーションが現在アクセスしようとしているURLですが、一致しないURLが含まれています
「my_url_name」の逆
これは見つけることができないURLの名前です
引数 '()'および
これらは、URLに提供する非キーワード引数です
キーワード引数「{}」が見つかりません。
これらは、URLに提供するキーワード引数です
n個のパターンが試行されました:[]
これらは、照合しようとしたurls.pyファイルで見つけることができたパターンです
まず、現在レンダリングされているURL(URL、ビュー、関連するテンプレート)に関連するコードをソース内で探します。ほとんどの場合、これは現在開発中のコードの一部です。
これを行ったら、のURLを作成しようとしているコード行に到達するまで、djangoが続く順序でコードを読み通してくださいmy_url_name
。繰り返しますが、これはおそらく最近変更した場所にあります。
エラーが発生している場所を発見したので、エラーメッセージの他の部分を使用して問題を解決します。
urls.py
(例:)、app_name = 'my_app'
または名前空間(例:)を使用してアプリinclude('myapp.urls', namespace='myapp')
を含めた場合、逆転するときに名前空間を含める必要があります(例:{% url 'myapp:my_url_name' %}
または)reverse('myapp:my_url_name')
。引数とキーワード引数は()
、URLパターン内の括弧で識別できる特定のURL内に存在するキャプチャグループと照合するために使用されます。
一致するURLに追加の引数が必要であると想定して、エラーメッセージを確認し、指定された引数の値が正しいように見えるかどうかをまず確認します。
それらが正しくない場合:
値がないか、空の文字列です
これは一般的に、渡した値に期待どおりの値が含まれていないことを意味します。値を割り当てる場所を見て、ブレークポイントを設定します。この値が正しく渡されない理由を理解する必要があります。
キーワード引数にタイプミスがあります
これを、URLパターンまたは作成中のURLのいずれかで修正してください。
それらが正しい場合:
正規表現をデバッグする
regexrなどのWebサイトを使用して、パターンが作成していると思われるURLと一致するかどうかをすばやくテストし、URLパターンを上部のregexフィールドにコピーしてから、テキスト領域を使用して、考えられるURLを含めることができます。一致する必要があります。
よくある間違い:
.
ワイルドカード文字またはその他の正規表現文字との照合
特定の文字を\
プレフィックスでエスケープすることを忘れないでください
小文字/大文字のみに一致
a-Z
またはの\w
代わりにa-z
またはを使用してみてくださいA-Z
一致するパターンが試行されたパターンに含まれていることを確認します
ここにない場合は、INSTALLED_APPS
設定にアプリを含めるのを忘れている可能性があります(またはアプリ内の順序を確認INSTALLED_APPS
する必要がある場合があります)。
Django 1.10では、PythonパスによってURLを逆にする機能が削除されました。代わりに、名前付きパスを使用する必要があります。
それでも問題を追跡できない場合は、試行した内容、調査した内容(この質問にリンクできます)を含む新しい質問を自由に行ってから、関連するコードを問題-一致するURL、関連するURLパターン、djangoが一致させようとしたエラーメッセージの一部、およびINSTALLED_APPS
該当する場合は設定。
set app_name in the app's urls.py (e.g. app_name = 'my_app')
ポイントがある
ルートのリストでルートを確認してください:
./manage.py show_urls | grep path_or_name
show_urls
はDjangoの機能ではありません。これは質問の答えにはなりません。