문제

urls.py 파일, 나는 다음과 같습니다.

from myapp import views
...
(r'^categories/$', views.categories)

어디에 categories 내부의보기 기능입니다 myapp/views.py. 다른 URLConf 라인 참조는 없습니다 views.categories.

단위 테스트 파일 에서이 URL을 사용하여 사용하고 있습니다. django.core.urlresolvers.reverse(), 단지 '/category/'를 복사하는 대신 (건조 및 그 모든 것). 그래서 나는 가지고있다:

from django.core.urlresolvers import reverse
from myapp import views
...

url = reverse(views.categories)

테스트를 실행하면 a를 얻습니다 NoReverseMatch 오류:

NoReverseMatch: Reverse for '<function categories at 0x1082f30>' with arguments '()' and keyword arguments '{}' not found.

URL 패턴을 다음과 같이 명명 된 패턴으로 만들면 잘 일치합니다.

url(r'^categories/$', views.categories, 'myapp-categories')

패턴 이름을 사용하여 일치합니다.

url = reverse('myapp-categories')

그러나 내가 말할 수있는 한 그만큼 reverse 선적 서류 비치, 사용하기 위해 명명 된 URL 패턴으로 만들 필요는 없습니다. reverse.

내가 잘못하고있는 아이디어가 있습니까?

도움이 되었습니까?

해결책 2

Futher 조사 후, Views 모듈을 가져 오는 방법에 문제가 있음이 밝혀졌습니다.

Django의 Reverse () 함수에 대한 함수 참조를 어떻게 성공적으로 전달합니까?

도움을 주셔서 감사합니다. 여러분은 제대로 보도록 영감을주었습니다.

다른 팁

Jack M.의 예는 거의 정확합니다.

명명 된 URL을 사용하려면 튜플이 아닌 URL 기능이어야합니다.

url(r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),

이것은 작동하며, 당신이 붙여 넣은 모든 코드는 정확하고 잘 작동합니다 (나는 그것을 깨끗한 테스트/프로젝트 앱으로 복사하여 문제없이 URL을 뒤집습니다). 그래서 당신이 우리에게 보여주지 않은 다른 일이 여기 있습니다. 작동 할 때까지 베어 본 기본 사항으로 단순화 한 다음 복잡성을 추가하고 어디에서 파괴되는지 확인하십시오.

또한 "./manage.py shell"을 수행 한 다음 리버스 기능과보기 기능을 대화식으로 가져 와서 리버스를 시도 할 수 있습니다. 그러면 테스트 설정을 가능한 원인으로 제거합니다.

역 함수는 실제로 URL의 "이름"을 사용합니다. 이것은 그렇게 정의됩니다.

urlpatterns = patterns('',
    (r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),
    (r'^admin/(.*)', admin.site.root),
)

이제 올바른 URL을 얻으려면 문자열 "No-Monkeys"로 반전을 호출합니다.

닌자 편집 : 여기 링크가 있습니다 주제에 대한 Django 문서에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top