인수 '()'및 키워드 인수 '{}'이 (가)있는 Django Reverse


144

안녕하세요, 격렬한 문제가 있습니다.

다음과 같은 URL 패턴이 있습니다.

# mproject/myapp.urls.py

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'),

브라우저에서 잘 작동하지만 테스트를 위해 쉘 에서이 작업을 수행합니다.

from django.test import Client
from django.core.urlresolvers import reverse

client= Client()
response = client.get(reverse('edit_project'), project_id=4)

나는 두려운 것을 얻는다 :

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found.

내가 여기서 무엇을 놓치고 있습니까?


에서 최신 장고 역의 URL에서 가져옵니다. 즉from django.urls import reverse
suhailvs

답변:


261

다음을 지정해야합니다 project_id.

reverse('edit_project', kwargs={'project_id':4})

여기 문서


1
템플릿 내에이 작업을 수행하는 방법도 포함시킬 수 있습니까?
Gershom

1
문서 에는 예제가 있습니다
miki725

참처럼 일했다!
Muhammad Haseeb

6

@ miki725 솔루션은 절대적으로 정확합니다. 또는와 args달리 속성 을 사용하려면 kwargs다음과 같이 코드를 간단히 수정할 수 있습니다.

project_id = 4
reverse('edit_project', args=(project_id,))

이에 대한 예는 설명서 에서 찾을 수 있습니다 . 이것은 본질적으로 동일한 작업을 수행하지만 속성은 인수로 전달됩니다. 전달 된 인수는 반대로하기 전에 값을 할당해야합니다. 이 경우에는 올바른 네임 스페이스를 사용하십시오 'edit_project'.


1
나는 그 간결함을 좋아한다.
Bartleby

2

이 문제는 활성화 링크를 생성하기 위해 reverse를 사용하고 전자 메일을 통해 보내려고 할 때 큰 두통을 겪었습니다. 그래서 나는 tests.py에서 동일하다고 생각합니다. 이를 수행하는 올바른 방법은 다음과 같습니다.

from django.test import Client
from django.core.urlresolvers import reverse

#app name - name of the app where the url is defined
client= Client()
response = client.get(reverse('app_name:edit_project', project_id=4)) 

1
방금 시도했지만 작동하지 않습니다. @ miki725의 답변이 맞습니다.
다니엘 반 Flymen

1
중괄호가 잘못된 위치에 있다고 생각합니다. response = client.get (reverse ( 'edit_project', project_id = 4))
Wim Feijen

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