应用命名空间与实例命名空间

应用命名空间

需求:
*在使用name的同时,会出现新的问题,就是不同url 中如果他们的name相同的话,Django会出错。会找到其他的name=‘login’
比如前端登录的app中url也使用的 name=‘login’
这时Django就会将前端与后端搞混,为了解决这一个问题,就要使用应用命名空间。
如何混乱呢,要看在pycharm中哪个APP在上面,就是用上面的url.py中的映射。

正确的代码应该这么写:
cms中url.py文件:

from django.urls import path
from . import views
#app_name
app_name = ‘cms’
urlpatterns = [
path(’’,views.index,name=‘cms’),
path(‘sigin/’,views.login,name=‘login’),
]

cms中view文件:
from django.http import HttpResponse
from django.shortcuts import reverse,redirect
def index(request):
username = request.GET.get(‘username’)
if username :
return HttpResponse(“首页”)
else:
#reverse的写法
url = reverse(‘cms:login’)
return (redirect(url))

def login(request):
return HttpResponse(“后台登录首页”)

1,实例命名空间:

  不同的url映射同一个APP这时需要实例命名空间,有几个url就有几个实例命名空间,出现这种情况如果不使用实例命名空间的话,就会发生用cms2访问的话,返回的是cms/login/这一结果。解决方法就是使用实例命名空间。

代码:
from django.urls import path,include

urlpatterns = [
path(’’,include(‘front.urls’)),
#实例命名空间需要跟include函数一起使用
path(‘cms1/’,include(‘cms.urls’,namespace=‘cms1’)),
path(‘cms2/’,include(‘cms.urls’,namespace=‘cms2’))
]

cms中的view.py文件:
from django.http import HttpResponse
from django.shortcuts import redirect,reverse

def cms(request):
username = request.GET.get(‘username’)
if username:
return HttpResponse(“后台首页”)
else:
#获取用户使用的是哪个url浏览的网页
current_namespace = request.resolver_match.namespace
return (redirect(reverse(’%s:login’%current_namespace)))

def cms_login(request):
return HttpResponse(“后台登录页面”)

cms中的urls.py文件:
from django.urls import path
from . import views
#应用命名空间
app_name = ‘cms’

urlpatterns = [
path(’’,views.cms,name=‘index’),
path(‘login/’,views.cms_login,name=‘login’)

]

猜你喜欢

转载自blog.csdn.net/jiating167168/article/details/89183951
今日推荐