2009-06-19 12 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), 

) 

編集:それは彼らが必要としているまでそれがインポートされないことは事実だ場合、それはメモリの最適化になるが、非existant機能やその他のエラーが実際にあなたまで上げられないだろうURLを訪問しようとします。

あなたががテストを書く場合は問題ではありません。もちろん、

;)

+0

申し訳ありませんが、私はmyViewがインスタンスではなく関数であると考えています。よく覚えているのは、Pythonのオブジェクトですが... – dzen

答えて

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

1

熟読source)カバーの下に使用し、必要に応じ際、インポートにのみ起こることが確認されているものであるdefaults.url RegexURLPattern(に、あなたの考えは正しいです:それはわずかな最適化ですが、徹底的なテストが必要です!

関連する問題