2013-10-30 28 views
4

我有一個Django項目,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作爲可重複使用的應用程序,在任何Django項目的工作是什麼?我應該如何處理網址格式?

我創建了一個tests/settings.py文件,並將ROOT_URLCONF config var更改爲指向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,這是)。

我的問題是:如何和我在哪裏應界定這個命名空間的可重複使用的應用程序,讓網址將工作獨立於應用程序安裝在Django項目的?

+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

問題就出現了,因爲你正在做一些測試,而這還沒有添加tests's鏈接到主urls.py,這是爲什麼:

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

給出:

u'tests' is not a registered namespace 

因爲你還沒有在主文件urls.py中添加tests包。

+0

我知道問題出在哪裏,我不知道如何解決它。如果我只測試我的可重用應用程序,那麼主要的'urls.py'文件是什麼? – linkyndy

+0

@AndreiHorak只需添加您的測試應用到您的主'urls.py',並將其註冊爲一個應用程序,它應該工作得很好,那麼。 –

+0

我正在測試一個唯一的可重用應用程序,我不明白你在說哪個'urls.py'。我用'pip'安裝了我的應用包,並運行了'django-admin.py test tests --settings = tests.settings'。我沒有其他'urls.py'比'tests/urls.py'中的那個'urls.py'。 – linkyndy

相關問題