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 urlfrom 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
|
v = reverse('author:detail', kwargs={'pk':11}) #获取url{% url 'author:detail' pk=12 pp=99 %} #在前端模板的显示 |
django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。
通过反射机制,为django开发一套动态的路由系统Demo: 点击下载

浙公网安备 33010602011771号