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/

posted on 2019-05-17 20:35  江湖乄夜雨  阅读(139)  评论(0编辑  收藏  举报