[django] NoReverseMatch 오류는 무엇이며 어떻게 수정합니까?
몇 가지 코드가 있으며 실행되면 NoReverseMatch가 발생합니다.
NoReverseMatch at / my_url / Reverse for ‘my_url_name’with arguments ‘()’and keyword arguments ‘{}’not found. n 개의 패턴 시도 : []
이것이 의미하는 바는 무엇이며 어떻게해야합니까?
답변
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
해당되는 경우 설정.
답변
그리고 경로 목록에서 경로를 확인하십시오.
./manage.py show_urls | grep path_or_name