Django 视图和URL的配置相关技巧
Django 视图和URL的配置相关技巧
今天看了相关的视图和URL的配置文章,在views.py配置中,觉得里面的技巧写法还是相当多的,做出相关的总结:
1.
urlpatterns = patterns('',(r'^hello/$','mysite.views.hello'), (r'^world/$','mysite.views.world'), ),
等价于
urlpatterns = patterns('mysite.views',(r'^hello/$','hello'), (r'^world/$','world'),),
2.
urlpatterns = patterns('',A,B),等价于
urlpatterns = patterns('',A,), urlpatterns += patterns('',B,),
3.
python正则表达式中,命名的正则表达式组的语法是(?
如:
urlpatterns=patterns('',(r'^articles/(?在django中,有命名组的会优先于非命名组的,否则会按位置参数的形式进行传递\d{4})/$',views.year_archive),)
4.
urlpatterns += patterns('', (r'^a1/$', b, {'c': C1}), (r'^a2/$', b, {'c': 'C2'}), )
其中响应的views中的方法是一样的,只是输入不同的url,跳转到不同的页面,此时可以直接用传参的形式,写法如上
接着,对应在定义一个 def b(request,c):
在跳转过后,c的值就可以在b方法中拿到加以运用
5.
在urlpatterns中,如果对应把某些参数写死,如:
urlpatterns=patterns('', (r'^a/b/$',c,{'A':'jan','B':'07'}), (r'^a/(?\w{3})/(? \d\d)/$,c), )
在如上的例子中,视图函数只会关心它获得了参数,它不会去管这些参数到底是捕捉回来的还是被额外提供的。
/a/b等价于/a/jan/06.
6.
如果冲突出现的时候,额外URLconf参数优先于捕捉值,如:
urlpatterns=patterns('', (r'^a/(?P在此,正则表达式和额外字典都包含了一个id,硬编码(额外字典的)id将优先使用,也就是说任何请求都会作id设置为3对待。\d+)/$',b,{'id':3}), )
7.
def a(request,num='1'): .......
urlpatterns=patterns('', (r'^b/$',views.a), (r'^b/c(?P\d+)/$',views.a), )
该方式中,如果匹配到第一个,没有任何参数的,会使用蚕食num的默认值“1”,如果第二个匹配成功,会使用正则表达式传递过来的num的值
8.
urlpatterns=patterns('', (r'^a/b/c$',views.A), (r'^([^/]+)/([^/]+)/c/$',views.B), )在如上情况下,如果/a/b/c的请求,则会被A视图处理,尽管URL也匹配第二种模式,但它会先匹配上面的模式,其他类似/xx/xx/c则被B视图处理(短路逻辑)
评论关闭