django.core.urlresolvers.를 어떻게 사용합니까?
문제
내 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 문서에.