一,简单配置:
url是一个内置的函数,里面需要四个参数,后面两个现在还不涉及,先简单介绍前两个
第一个参数是正则表达式(如果要精准匹配:'^publish/$')
第二个参数是视图函数(不需要加括号)
例如:-url(r'^admin/', admin.site.urls),
二,无名分组(在正则匹配中分组)
1,按位置传参
2,分组之后,会把分组出来的数据,当位置参数,传到视图函数,所以视图函数需要定义形参,来接收传过来的参数
3,-url(r'^publish/([0-9]{4})/([0-9]{2})$', views.publish),
-def publish(request,*args): 视图函数可以这样接收
三,有名分组(在正则匹配中定义有名分组)
1,按关键字传参
2,分组之后,会把分组出来的数据,当关键字参数,传到视图函数,所以视图函数需要定义形参,形参的名字要跟分组的名字对应,与顺序无关
3,url(r'^publish/(?P<year>[0,9]{4})/(?P<month>[0,9]{2})/$',views.publish)
def publish(request,month,year):
注意:有名分组和无名分组不要混用
四,反向解析:
1,先命名,在urls中
无参数:url(r'^publishadd/$',views.publish,name='add') 无名分组:url(r'^publishadd/([0,9]{4})/$',views.publish,name='add') 有名分组:url(r'^publishadd/(?P<year>[0,9]{4})/(?P<mounth>[0-9]{2})/$',views.publish,name='add')
2,在模板层
无参数:{% url 'add' %} 无名分组:{% url 'add' 2018 12 %} 有名分组:{% url 'ddd' 2018 12 %} 还可以 {% url 'ddd' year=2018 mounth=12 %}
3,在视图层
from django.shortcuts import reverse 无参数:url=reverse('add') 无名分组:url=reverse('add',args=(2018,12,)) 有名分组:url=reverse('add',args(2018,12,)) 还可以 url=reverse('add',kwargs={'year':2018,'mounth':12})
五,路由分发
1,在不同的app中创建urls.py
2,在总路由中
from django.conf.urls import include url(r'^blog/',include('blog.urls')), url(r'^app01/',include('app01.urls'))
3,在不同的app的urls里配置路由关系
注意:总路由,不能加结束符
六,名称空间
url(r'^blog/',include('blog.urls',namespase='blog')),
-子路由:url(r'^publish/$',views.publish,name='test')
反向解析:
-视图层:url = reverse('blog:test')
-模板层:{% url 'app01:test' %}
一般不要用:直接在子路由中设置不同的名字就好
子路由:url(r'^publish/$', views.publish,name='app01_test'),
七,伪静态
-路由:url(r'^book/(?P<id>\d+.html)',views.book),
-访问:http://127.0.0.1:8000/book/4.html