django的一條哲學是(don't repeat yourself DRY ).熟悉django的人都知道,在0.96版中新加入了django.core.urlresolvers.reverse這個東東,下面讓我們來看一下這究竟是怎樣反映DRY思想的:
首先讓我們一句話概括reverse()是干什么的?
反解析url以直接訪問其它視圖方法。眾所周知,在django的mvc(mvt也可以)中,url和view是通過url.py和views.py實現分離的,具體view的訪問是通過url.py中設置的對應方法來實現的。這固然是正確的。但是考慮如下情況,我們有一個view最后實現頁面跳轉:
views.py
def redirect(request):
return HttpResponseRedirect("/vote/1/")
url.py
(r'^/vote/(?P<poll_id>\d+)/$','mysite.poll.vote')
這樣做起來就有1個問題:如果未來某天我們的url發生了改變,我們將不得不同時修改這兩個文件。這和DRY哲學思想是沖突的,那么有什么辦法能讓我們只用修改url.py呢,答案就是使用reverse().
reverse的用例如下:
views.py
from django.core.urlresolvers import reverse
def redirect(request):
return HttpResponseRedirect(reverse('mysite.polls.views.detail',args=(1,)))
很容易明白,第一個參數就直接添入要使用的view方法,第二個args里邊順序填入方法的參數,(extra_context也從這里傳入)然后剩下的就全部交給django去完成拉。于是我們就可以放心的修改url.py里的url配置,不
必再擔心有什么地方沒修改網站出錯啦.SO COOL!
posted on 2008-09-24 22:22
周銳 閱讀(1336)
評論(0) 編輯 收藏 所屬分類:
Python