03-路由控制5——名称空间
03-路由控制5——名称空间
1、反向解析的过程中用到名称空间!
2、在项目中建立一个app02
pycharm的Terminal中:
python manage.py startapp app02
然后改一下全局的分发的代码
#全局的urls.py文件中:
urlpatterns = [
path('admin/', admin.site.urls),
#分发————将app01与app02分开
re_path(r'^app01',include('app01.url')),
re_path(r'^app02',include('app02.url'))
]
然后在app02中建立一个url.py文件
app02的url.py文件内容如下:
from django.contrib import admin
from django.urls import path,re_path
from app02 import views
urlpatterns = [
re_path(r'index/',views.index)
]
app02的views.py文件内容如下
from django.shortcuts import render,HttpResponse
def index(request):
return HttpResponse('OK_app02')
#我们访问 http://127.0.0.1:8000/app02/index/ 即可看到 OK_app02
接着 我们在app01中也建立相同的index
url中:
urlpatterns列表加一个这个:re_path(r'index/',views.index)
views中:
def index(request):
return HttpResponse('OK_app01')
#我们访问 http://127.0.0.1:8000/app01/index/ 即可看到 OK_app01
存在的问题
然后分别在app01与app02的url中加相同的别名
re_path(r'index/',views.index,name='OK_app')#让他俩的“别名“一样
然后分别修改一下app01与app02的views.py下的index函数
两个函数都一样!
from django.urls import reverse
def index(request):
url = reverse('OK_app')
return HttpResponse(url)
#此时我们在访问 http://127.0.0.1:8000/app01/index/ 会出现:/app02/index/ 错误
名称空间解决
全局urls.py中这样做分发
#分发+————注意名称空间写在元组中!——相当于加了个房间号!名称空间不可重名!
re_path(r'^app01',include(('app01.url','app01'))),
re_path(r'^app02',include(('app02.url','app02')))
然后分别在app01与app02的index函数中这样修改
app01的views.py中:
from django.urls import reverse
def index(request):
url = reverse('app01:OK_app')
return HttpResponse(url)
app02的views.py中
from django.urls import reverse
def index(request):
url = reverse('app02:OK_app')
return HttpResponse(url)
验证
在浏览器输入:
http://127.0.0.1:8000/app02/index/ 结果:/app02index/
http://127.0.0.1:8000/app01/index/ 结果:/app01index/