NoReverseMatch 오류는 무엇이며 어떻게 수정합니까?


119

몇 가지 코드가 있으며 실행되면 NoReverseMatch가 발생합니다.

NoReverseMatch at / my_url / Reverse for 'my_url_name'with arguments '()'and keyword arguments '{}'not found. n 개의 패턴 시도 : []

이것이 의미하는 바는 무엇이며 어떻게해야합니까?

답변:


243

NoReverseMatch오류가 장고는 설치된 응용 프로그램의 URL 중 하나에 제공 한 URL에 대한 일치하는 URL 패턴을 찾을 수 있음을 말하고있다.

NoReverseMatch 예외는 제공된 매개 변수를 기반으로 URLconf에서 일치하는 URL을 식별 할 수없는 경우 django.core.urlresolvers에 의해 발생합니다.

디버깅을 시작하려면 제공된 오류 메시지를 분석하여 시작해야합니다.

  • / my_url /에서 NoReverseMatch

    현재 렌더링중인 URL입니다. 애플리케이션이 현재 액세스를 시도하고 있지만 일치 할 수없는 URL이 포함되어 있습니다.

  • 'my_url_name'의 반대

    찾을 수없는 URL의 이름입니다.

  • 인수 '()'및

    URL에 제공하는 키워드가 아닌 인수입니다.

  • 키워드 인수 '{}'을 (를) 찾을 수 없습니다.

    URL에 제공하는 키워드 인수입니다.

  • n 개의 패턴 시도 : []

    다음은 일치 시키려고 시도한 urls.py 파일에서 찾을 수있는 패턴입니다.

현재 렌더링중인 URL (URL,보기 및 관련된 템플릿)과 관련된 소스에서 코드를 찾는 것으로 시작합니다. 대부분의 경우 이것은 현재 개발중인 코드의 일부입니다.

이 작업을 완료 한 후에는 .NET 용 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 내에 존재하는 모든 캡처 그룹과 일치하는 데 사용됩니다 .

일치하는 URL에 추가 인수가 필요하다고 가정하고 오류 메시지를 살펴보고 먼저 지정된 인수의 값이 올바른지 살펴보십시오.

정확하지 않은 경우 :

  • 값이 누락되었거나 빈 문자열

    이는 일반적으로 전달하는 값에 예상되는 값이 포함되어 있지 않음을 의미합니다. 값을 할당하고 중단 점을 설정 한 위치를 살펴보면이 값이 올바르게 전달되지 않는 이유를 파악해야합니다.

  • 키워드 인수에 오타가 있습니다.

    URL 패턴 또는 구성중인 URL에서이를 수정하십시오.

올바른 경우 :

  • 정규식 디버그

    정규식 과 같은 웹 사이트를 사용 하여 패턴이 만들고 있다고 생각하는 URL과 일치하는지 여부를 빠르게 테스트하고 URL 패턴을 상단의 정규식 필드에 복사 한 다음 텍스트 영역을 사용하여 생각하는 URL을 포함 할 수 있습니다. 일치해야합니다.

    흔한 실수:

    • .와일드 카드 문자 또는 기타 정규식 문자 와 일치

      특정 문자는 \접두사 로 이스케이프해야 합니다.

    • 소문자 / 대문자 만 일치

      중 하나를 사용하여 시도 a-Z하거나 \w대신 a-z또는A-Z

  • 일치하는 패턴이 시도한 패턴에 포함되어 있는지 확인하십시오.

    여기에 없으면 앱을 INSTALLED_APPS설정 에 포함하는 것을 잊었을 수 있습니다 (또는 앱의 순서를 살펴볼 INSTALLED_APPS필요가있을 수 있음).

장고 버전

Django 1.10에서는 파이썬 경로로 URL을 반전하는 기능이 제거되었습니다. 대신 명명 된 경로를 사용해야합니다.


여전히 문제를 추적 할 수없는 경우 시도한 내용, 조사한 내용 (이 질문에 연결할 수 있음)을 포함하는 새로운 질문을 자유롭게 한 다음 관련 코드를 문제-일치하는 URL, 관련 URL 패턴, django가 일치하려고 시도한 내용을 보여주는 오류 메시지 부분 및 INSTALLED_APPS해당되는 경우 설정.


11
마지막으로 우리는 우리가 DUP 대상으로 제공 할 수있는 정규 대답을
e4c5

django 1.10에서 명명 된 경로에 대해 자세히 설명해 주시겠습니까?
sage poudel

2
예, set app_name in the app's urls.py (e.g. app_name = 'my_app') 요점입니다
CK

나는이 라이브 정규식 테스터 더 도움이 : regex101.com
obotezat

NoReverseMatch에 대한이 멋진 튜토리얼에 감사드립니다! 내 문제를 정리할 수있었습니다.
newmachines_xyz

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.