應用名稱空間與例項名稱空間
阿新 • • 發佈:2021-06-29
這個前輩寫的正不錯,我就直接理解了,拿來筆記了(注:redirect給他的是一個路徑,而reverse給他的是名字,可帶頭部名稱空間加冒號:)
-
在多個app之間,有可能產生同名的url,這個時候避免反轉url的時候混淆,可以使用應用名稱空間做區分。應用名稱空間使用。在應用url中定義 app_name;
- 一個app,可以建立多個url對映到一個app中,所以就會產生一個問題,在做反轉的時候,如果不使用名稱空間,就會混淆,為了避免這個問題。我們可以使用例項名稱空間。在include函式中新增namespace即可;
下面通過兩個案例說明
在我的front\urls.py和back\urls.py我把首頁和登入name都分別取名index,login,那麼就有同名稱個兩個,此時reverse會疑惑,名稱空間就是解決這個問題的:
front\urls.py
from django.urls import path
from . import views
app_name = 'front'
urlpatterns = [
path('', views.index, name='index'),
path('sign/', views.login, name='login'),
]
back\urls.py
from django.urls import path from . import views app_name = 'back' urlpatterns = [ path('', views.index), path('login/', views.login), ]
front\views.py
from django.shortcuts import render from django.http import HttpResponse from django.shortcuts import redirect, reverse # Create your views here. def index(request): username = request.GET.get("username") if username: return HttpResponse("前臺首頁") else: return redirect(reverse('front:login')) def login(request): return HttpResponse("前臺登入")