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

  • 指定url名称
  • 应用命名空间:
  • 应用命名空间与实例命名空间:


因为url经常变化。如果在代码中写死可能会经常改代码。给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了

指定url名称

path函数中,传递一个name参数就可以指定

urlpatterns = [
    path('',views.index,name='index'),
    path('login/',views.login,name='login')
]

应用命名空间:

在多个app之间,有可能产生同名的url。为了避免反转url的时候混淆,使用应用命名空间,来做区分。定义应用命名空间只要在appurls.py中定义一个叫做app_name的变量,来指定这个应用的命名空间即可。

app_name = 'front'

urlpatterns = [
    path('',views.index,name='index'),
    path('login/',views.login,name='login')
]

以后在做反转的时候可以使用应用命名空间:url名称进行反转。

login_url = reverse('front:login')

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

一个app,可以创建多个实例。可以使用多个url``映射同一个app。就会产生一个问题。以后在做反转的时候,如果使用应用命名空间,就会发生混淆。为了避免这个问题。可以使用实例命名空间。实例命名空间只要在include函数中传递一个namespace变量即可。

urlpatterns = [
    path('',include('front.urls')),
    # 同一个app下有两个实例
    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))