django-在urls.py中传递字符串或实例?

Jia*_*aro 5 django url optimization

在url patters和函数实例中传递字符串有什么好处?似乎它可以被优化为在需要之前不实际加载函数,但事实上这是真的吗?

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),

)
Run Code Online (Sandbox Code Playgroud)

编辑:如果它确实在它们需要之前不会导入,那么它将是内存的优化,但是在你真正尝试访问url之前不会引发不存在的函数和其他错误.

当然,如果您编写测试,这不是问题;)

Jam*_*ett 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)))
Run Code Online (Sandbox Code Playgroud)

等等

这允许你有装饰器,只有当你特别想要它们时才应用于视图,而不是在视图文件中装饰,然后不得不忍受它总是应用装饰器.