应用命名空间/实例命名空间
- 指定url名称
- 应用命名空间:
- 应用命名空间与实例命名空间:
因为url经常变化。如果在代码中写死可能会经常改代码。给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了
指定url名称
在path函数中,传递一个name参数就可以指定
urlpatterns = [
path('',views.index,name='index'),
path('login/',views.login,name='login')
]应用命名空间:
在多个app之间,有可能产生同名的url。为了避免反转url的时候混淆,使用应用命名空间,来做区分。定义应用命名空间只要在app的urls.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))
















