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>
posted @ 2018-09-04 17:28  luck_L  阅读(192)  评论(0编辑  收藏  举报