day18-django路由分发

 一、引子 

  之前我们写urls的时候,都是在project下的urls.py文件里面写我们需要跳转的url,但是你有没有想过,一个project下我们有很多app,那么每一个app开发的人员都不一样,如果频繁的去改project下的urls的话,那就会乱掉的,所以我们应该只需要在app里面修改就行了,没有必要全部在project里面修改

二、路由的分发

  1.在project \ urls  导入 include,

  2.设置转发到对应的APP,

    

  3.在app 下新建 urls,  设置url 路由

    

  4.访问的时候,url 变化

    原来:http://127.0.0.1:8000/home/   后来,http://127.0.0.1:8000/cmdb/home/

  

  

三、默认值和命名空间

  3.1、添加默认值

  说明:输入url时,传入默认值到后台

  

 

    结果

       

 

   --------------------------以下内容来自师兄博客----------------

  

3.2、命名空间

如图:

a. project.urls.py

1
2
3
4
5
6
from django.conf.urls import url,include
  
urlpatterns = [
    url(r'^a/', include('app01.urls', namespace='author')),
    url(r'^b/', include('app01.urls', namespace='publisher')),
]

b. app01.urls.py

1
2
3
4
5
6
7
from django.conf.urls import url
from app01 import views
  
app_name = 'app01'
urlpatterns = [
    url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
]

c. app01.views.py

1
2
3
def detail(request, pk):
    print(request.resolver_match)
    return HttpResponse(pk)

 以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

1
2
= reverse('author:detail', kwargs={'pk':11})  #获取url
{% url 'author:detail' pk=12 pp=99 %}   #在前端模板的显示

django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。

通过反射机制,为django开发一套动态的路由系统Demo: 点击下载

posted @ 2018-07-14 12:22  东郭仔  阅读(118)  评论(0)    收藏  举报