应用命名空间也称为app命名空间。
同一个app可以用不同的url来映射,比如下面的代码,两个url都指向同一个app,也就是所谓的同一个app有两个实例。第一个实例是cms1,第二个实例是cms2。
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('',include('front.urls')),
# 同一个app下有两个实例
path('cms1/',include('cms.urls')),
path('cms2/',include('cms.urls')),
]
1个app可以创建多个实例,可以使用多个url映射同一个app,所以这就会发生一个问题,以后再反转的实施,如果使用命名空间,那就会发生混淆,为了避免这个问题,我们可以使用实例命名空间。实例命名空间非常简单,只要在‘include’函数中传递一个‘namespace’变量即可,示例代码如下:
urlpatterns = [
path('',include('front.urls')),
path('cms1/',include('cms.urls',namespace='cms1')),
path('cms2/',include('cms.urls',namespace='cms2')),
]
以后再做反转的时候,就可以以实例命名空间来指定具体的url,示例代码如下:
def index(request):
username = request.GET.get("username")
if username:
return HttpResponse('CMS首页')
else:
current_namespace = request.resolver_match.namespace
return redirect(reverse("%s:login"%current_namespace))