2013-03-19 40 views
0

這兩個django的網址模式測試,一個URL是匹配的正確視圖

(r'^articles/(\d{4})/$', 'news.views.year_archive'),
(r'^articles/2003/$', 'news.views.special_case_2003'),

special_case_2003視圖永遠不會因爲它

如何可以在上面較寬圖案的被稱爲我測試(在tests.py)通過URL模式匹配了哪些視圖,以確保我的網址與所需的視圖匹配

回答

2

這不會讓你匹配原正則表達式,但它會告訴你匹配一個模式的一個例子:

from django.core.urlresolvers import resolve 

def test_foo(self): 
    func = resolve('/foo/').func 
    func_name = '{}.{}'.format(func.__module__, func.__name__) 
    self.assertEquals('your.module.view_name' func_name) 
+0

Greate one,但應該是'func = resolve( '/ foo /')。func' – MYaser 2013-03-19 14:46:27

+1

嗯,是的,在我的終端,但沒有複製它出於某種原因。 – 2013-03-19 15:35:35

0

您應該pu t特殊情況優先:

(r'^articles/2003/$', 'news.views.special_case_2003'), 
(r'^articles/(\d{4})/$', 'news.views.year_archive'), 

從上到下對url進行評估,從而呈現url匹配的第一個視圖。你可以在瀏覽器中使用它們來測試這些URL,或者你可以在tests.py中爲它們寫一個特定的測試。

有關如何測試urls.py的更多信息,請參閱https://docs.djangoproject.com/en/1.4/topics/testing/#testing-tools,其中解釋瞭如何檢查您是否收到200響應以及如何測試某些內容是否存在。

這裏是典型的例子:

>>> from django.test.client import Client 
>>> c = Client() 
>>> response = c.post('/login/', {'username': 'john', 'password': 'smith'}) 
>>> response.status_code 
200 
>>> response = c.get('/customer/details/') 
>>> response.content 
'<!DOCTYPE html...' 
+0

是的特殊情況應該是第一個, 但許多情況下,你正在擴展第三方應用程序和衝突可能發生 我想在tests.py中爲他們寫一個特定的測試,問題是如何? – MYaser 2013-03-19 12:32:36

+0

嗨MYaser。你讀過https://docs.djangoproject.com/en/1.5/intro/tutorial05/了嗎? – Private 2013-03-19 12:34:10

+0

是的,我做過,但沒有任何測試的url匹配 您可以測試上下文,模板,...但最後你不能明確知道什麼視圖已經執行 – MYaser 2013-03-19 12:38:30

相關問題