流线型化(streamlinling)函数导入
1:直接导入视图函数
from
django.conf.urls.defaults import *
from
mysite.views import hello
urlpatterns
= patterns('',
(r'^hello/$', hello),
(r'^time/$', time),
)
2:导入包函模块名和函数的客串,而不是函数本身
from
django.conf.urls.defaults import *
from mysite
import views
urlpatterns
= patterns('',
(r'^hello/$', 'views.hello'),
(r'^time/$', 'views.time'),
)
3:不用导入任何视图内容,写清楚字符串描述
from
django.conf.urls.defaults import *
urlpatterns
= patterns('',
(r'^hello/$', 'mysite.views.hello'),
(r'^time/$', 'mysite.views.time'),
)
4:提取一个公共视图前缀
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.views',
(r'^hello/$', 'hello'),
(r'^time/$', 'time'),
)
5:partterns()返回对对象的相加
旧:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.view',
(r'^hello/$', 'hello'),
(r'^time/$', 'time'),
(r'^other/$', 'mysite.others.other'),
)
新:
from
django.conf.urls.defaults import *
urlpatterns
= patterns('mysite.view',
(r'^hello/$', 'hello'),
(r'^time/$', 'time'),
)
urlpatterns
+= patterns('mysite.others',
(r'^other/$', 'other'),
)
6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们
想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更
高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数 传给视图。
在python正则表达式中,命名的正则表达式组的语法是(?p<name>pattern),这里name是组的名字,而pattern是匹配的某个模式。
下面是一个使用无名组的URLconf的例子:
from
django.conf.urls.defaults import *
from mysite
import views
urlpatterns
= patterns('',
(r'^arcticles/(\d{4})/$',views.year_archive),
(r'^arcticles/(\d{4})/(\d{2})/$', view.moth_archive),
)
下面是相同的URLconf,使用命名组进行了重写:
from
django.conf.urls.defaults import *
from mysite
import views
urlpatterns
= patterns('',
(r'^arcticles/(?P<year>\d{4})/$',
veiws.year_archive),
(r'^arcticles/(?P<year>\d{4})/(?P<month>\d{2})/$',
veiws.month_archive),
)
如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:
month_archive(request, '2006', '03')
而带命名组,同样的请求就是这样的函数调用:
month_archive(request, year='2006',
month='03')
从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,
还可以让你的定义中对参数重新排序。
7:视图冗余:
#
urls.py
from
django.conf.urls.defaults import *
from mysite
import views
urlpatterns
= patterns('',
|