django路由

 

路由

无名分组

url(r'^test/([0-9]{4})/([0-9]{2})', views.test)正则表达式

  • url为一个函数,第一个参数写正则表达式
  • 路由从上往下匹配,一旦匹配成功就不继续向下走了
  • 若是分多个组,相应的视图函数就须要用多个参数接收,个数必须一致,或者使用*args
  • 在setting里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,带上斜杠就匹配失败
  • 伪静态,方便搜索引擎收录

有名分组

  • url(r'^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})', views.test)
  • 相应的视图函数中的参数名字和个数必须一致,不然会报错,位置能够颠倒
  • 有名分组能够使用**kwargs接收
  • 分组捕获的参数,都是str类型
  • 能够能够设置默认值

路由分发

  • 先导入from django.conf.urls import include
  • url(r'^app01/',include('app01.urls'))
  • 在相应的app里建立urls.py文件
  • 文件中的urlpatterns不能变名字,其余写法与自带的相同

反向解析

1.路由中,命一个名,url(r'^index/', views.index,name='n1') 2.在视图函数里导入from django.shortcuts import reverse # 拿到反向解析的url url = reverse('n1') 3.在模板里使用时: {% url 'n1' %} 4.带位置参数的反向解析 url(r'^index/([0-9]{4})/([0-9]{2})', views.index,name='n1') 在视图中:url=reverse('n1',args=(2012,12,)) 在模板中:{% url 'n1' 2012 12 %} 5.带关键字参数反向解析 url(r'^index/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})', views.index,name='n1') 在视图中: 方法一:url=reverse('n1',args=(2012,12,) 方法二:url=reverse('n1',kwargs={'year'=2012,'month':12}) 在模板中: 方法一:{% url 'n1' 2012 12 %} 方法二:{% url 'n1' month=12 year=2012 %} 注意:按位置传,顺序必须是固定的 做用:修改路由中url的时候,其它地方不须要改动 

名称空间

(知道它,可是建议不一样app的url里name不能重名,app的名字_name)
主urls中 url(r'^app01/', include('app01.urls',namespace='app01')), url(r'^app02/', include('app02.urls',namespace='app02')), app01的urls中 urlpatterns = [ url(r'^test',views.test3 ,name='test'), ] app02的urls中 urlpatterns = [ url(r'^test02',views.test3 ,name='test'), ] 在视图函数中: url=reverse('app02:test') 在模板中: <a href="{% url 'app02:test' %}">点我跳到首页</a>
相关文章
相关标签/搜索