2009-06-19 75 views
5

在你的url模式中傳遞一個字符串與函數實例是否有好處?它看起來像可能被優化,不實際加載功能,直到它需要,但這是事實嗎?django-在urls.py中傳遞一個字符串或一個實例?

from django.conf.urls.defaults import * 
from myapp.views import myView 

urlpatterns = patterns('', 
    # as a string 
    url(r'^as-string/$', "myapp.views.myView"), 

    # Uploading photos 
    url(r'^as-instance/$', myView), 

) 

編輯:如果這是真的,它不會導入在需要直到他們,那麼這將是對內存的優化,但不存在的功能和其他錯誤不會實際募集直到你嘗試訪問該網址。

當然,如果你編寫測試,雖然這不是一個問題;)

+0

對不起,但我希望myView是一個功能,而不是一個實例。以及一個功能是python中的對象,但是... – dzen 2011-01-26 10:45:31

回答

8

最主要的好處是當你使用實際的可調用對象時,你可以在URLConf中執行諸如應用裝飾器之類的操作。所以,你可以做這樣的事情:

from django.conf.urls.defaults import * 
from django.contrib.auth.decorators import login_required 

from some_module import some_view 

urlpatterns = patterns('', 
         (r'^some_url/$', some_view), 
         (r'^some_other_url/$', login_required(some_view))) 

這讓你有隻適用於當你明確他們想要的,而不是在意見文件裝飾,然後有一個觀點裝飾與它一起生活,總是有裝飾應用。

+0

我喜歡那個技巧我必須從現在開始做:) – Jiaaro 2009-06-20 15:52:02

1

細讀source到RegexURLPattern(這是什麼defaults.url在幕後用)證實,如果需要時,進口只發生,所以你的想法是正確的:這是一個輕微的優化,但需要徹底的測試!

相關問題