1. 程式人生 > 其它 >應用名稱空間與例項名稱空間

應用名稱空間與例項名稱空間

這個前輩寫的正不錯,我就直接理解了,拿來筆記了(注:redirect給他的是一個路徑,而reverse給他的是名字,可帶頭部名稱空間加冒號:)

  1. 在多個app之間,有可能產生同名的url,這個時候避免反轉url的時候混淆,可以使用應用名稱空間做區分。應用名稱空間使用。在應用url中定義 app_name;

  2. 一個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("前臺登入")