Django 视图和URL的配置相关技巧

来源:互联网 发布:国密4算法的java实现 编辑:程序博客网 时间:2024/04/28 13:53

  今天看了相关的视图和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正则表达式中,命名的正则表达式组的语法是(?<name>pattern)

 如:

urlpatterns=patterns('',(r'^articles/(?<year>\d{4})/$',views.year_archive),)
在django中,有命名组的会优先于非命名组的,否则会按位置参数的形式进行传递


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':'06'}),                 (r'^a/(?<A>\w{3})/(?<B>\d\d)/$,c),)


在如上的例子中,视图函数只会关心它获得了参数,它不会去管这些参数到底是捕捉回来的还是被额外提供的。

/a/b等价于/a/jan/06.

6.

如果冲突出现的时候,额外URLconf参数优先于捕捉值,如:

urlpatterns=patterns('',(r'^a/(?P<id>\d+)/$',b,{'id':3}),)
在此,正则表达式和额外字典都包含了一个id,硬编码(额外字典的)id将优先使用,也就是说任何请求都会作id设置为3对待。


7.

def a(request,num='1'):.......

urlpatterns=patterns('',(r'^b/$',views.a),(r'^b/c(?P<num>\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视图处理(短路逻辑)



0 0
原创粉丝点击