2013-10-30 2 views
4

나는 장고 프로젝트 인 training과이 프로젝트 내부의 응용 프로그램이 tests입니다. 폴더 구조는 다음과 같습니다 : 나는 정의이 패턴을Django 재사용 가능한 응용 프로그램의 URL 네임 스페이스 문제

django-training 
    tests 
     urls.py 
    training 
     urls.py 

training/urls.py 내부의

url(r'^tests/', include('tests.urls', namespace='tests')) 

그리고 tests/urls.py 안에 내가 이러한 패턴이 정의되어있다 :

url(r'^$', index, name='index'), 
url(r'^(\d+)/$', view, name='view'), 
url(r'^give-up/$', give_up, name='give_up'), 
url(r'^(\d+)/result/$', result, name='result') 

모든 것이 잘 작동합니다.

그러나 tests 앱을 장고 프로젝트에서 작동하는 재사용 가능한 앱으로 패키지하려면 어떻게해야합니까? URL 패턴은 어떻게해야합니까?

나는 tests/settings.py 파일을 만들고 ROOT_URLCONF 구성 변수를 tests/urls.py으로 변경했습니다. 이 오류가 발생합니다 그러나이 작동하지 않습니다 :

Traceback (most recent call last): 
File "/home/user/.virtualenvs/clean2/local/lib/python2.7/site-packages/tests/tests.py", line 173, in testContext 
    response = self.client.get(reverse('tests:view', args=(1,))) 
File "/home/user/.virtualenvs/clean2/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 492, in reverse 
key) 
NoReverseMatch: u'tests' is not a registered namespace 

오류가 매우 로직, reverse 정의 할 수있는 공간이 필요하기 때문에 (tests을, 즉).

제 질문은 : 앱이 설치된 장고 프로젝트와 독립적으로 URL이 작동하도록 재사용 가능한 앱에 대해이 네임 스페이스를 어떻게 그리고 어디서 정의해야합니까?

당신은 몇 가지 테스트를하고 있으며,이 메인 urls.pytests's URL을 추가하지 않았기 때문에 문제가 발생
+0

역 호출을 볼 수 있습니까? –

+0

@GamesBrainiac 함수 호출을 포함하여 오류의 전체 추적을 추가했습니다. – linkyndy

답변

2

Django manual에서이 문제에 대한 빠른 해결책을 발견했습니다. 내 tests/urls.py에서

은 나뿐만 그래서 test 네임 스페이스를 포함 시켰습니다 :

test_patterns = patterns('', 
    url(r'^$', index, name='index'), 
    url(r'^(\d+)/$', view, name='view'), 
    url(r'^give-up/$', give_up, name='give_up'), 
    url(r'^(\d+)/result/$', result, name='result'), 
) 

urlpatterns = patterns('', 
    url(r'^tests/', include(test_patterns, namespace='tests')), 
) 

URL 문제가 이제 해결하고 모든 것이 예상대로 작동하는 역.

+0

이것은 내가 당신에게해야 할 말입니다. 나는 당신이'시험 '이외의 다른 앱을 가지고 있다고 생각했다. –

+0

아니, 나는하지 않았고, 네임 스페이스에 포함 할 곳을 혼동했다. 당신의 도움을 주셔서 감사합니다. – linkyndy

2

,이 이유 :

response = self.client.get(reverse('tests:view', args=(1,))) 

가 제공합니다 :

u'tests' is not a registered namespace 

당신이하지 않았기 때문에 주 urls.py 파일에 패키지를 추가했습니다.

+0

나는 그 문제가 무엇인지를 안다. 어떻게 해결해야할지 몰랐다. 재사용 가능한 응용 프로그램 만 테스트하는 경우 기본 'urls.py' 파일은 무엇입니까? – linkyndy

+0

@AndreiHorak 메인 'urls.py'에 테스팅 앱을 추가하고 앱으로 등록하면 잘 작동합니다. –

+0

재사용 가능한 유일한 앱을 테스트하고 있는데, 어떤 'urls.py'에 대해 이야기하고 있는지 이해할 수 없습니다. 내 앱 패키지를'pip'와 함께 설치하고'django-admin.py test tests --settings = tests.settings'을 실행했습니다. 나는'tests/urls.py'에있는 것보다 다른'urls.py'를 가지고 있지 않습니다. – linkyndy