在多個(gè)app之間,有可能產(chǎn)生同名的url,這個(gè)時(shí)候避免反轉(zhuǎn)url的時(shí)候混淆,可以使用應(yīng)用命名空間做區(qū)分。應(yīng)用命名空間使用。在應(yīng)用url中定義 app_name;
下面通過兩個(gè)案例說明
#python manage.py startapp app01
#python manage.py startapp app02
from django.contrib import admin
from django.conf.urls import url, include
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('app01/', include('app01.urls')),
path('app02/', include('app02.urls')),
]
from django.urls import path
from . import views
urlpatterns = [
path('', views.index,name='index'),
path('login', views.login,name='login'),
]
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect,reverse
# Create your views here.
def index(request):
if request.GET.get("username"):
return HttpResponse("front page app01!")
else:
return redirect(reverse("login"))
def login(request):
return HttpResponse("Login page app01!")
from django.urls import path
from . import views
urlpatterns = [
path('', views.index,name='index'),
path('login', views.login,name='login'),
]
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect, reverse
# Create your views here.
def index(request):
if request.GET.get("username"):
return HttpResponse("front page app02!")
else:
return redirect(reverse("login"))
def login(request):
return HttpResponse("Login page app02!")
我們可以看到每個(gè)app下面的urls都定義了name=index和name=login。 而每個(gè)views下面的reverse都是login。這個(gè)時(shí)候django回去找誰呢? 當(dāng)我們?yōu)g覽器打開路徑: http://127.0.0.1:8000/app01 的時(shí)候,我們會發(fā)現(xiàn)跳轉(zhuǎn)異常,竟然跳轉(zhuǎn)到地址: http://127.0.0.1:8000/app02/login 上面。
這個(gè)時(shí)候我們使用命名空間app_name,就可以很好解決這個(gè)問題。
from django.urls import path
from . import views
#命名空間
app_name = 'app01' #這里變化了
urlpatterns = [
path('', views.index,name='index'),
path('login', views.login,name='login'),
]
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect,reverse
# Create your views here.
def index(request):
if request.GET.get("username"):
return HttpResponse("front page app01!")
else:
return redirect(reverse("app01:login")) #這里變化了
def login(request):
return HttpResponse("Login page app01!")
from django.urls import path
from . import views
app_name = 'app02' #這里變化了
urlpatterns = [
path('', views.index,name='index'),
path('login', views.login,name='login'),
]
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect, reverse
# Create your views here.
def index(request):
if request.GET.get("username"):
return HttpResponse("front page app02!")
else:
return redirect(reverse("app02:login")) #這里變化了
def login(request):
return HttpResponse("Login page app02!")
當(dāng)我們?yōu)g覽器打開路徑: http://127.0.0.1:8000/app01 的時(shí)候,就會正常跳轉(zhuǎn)地址: http://127.0.0.1:8000/app01/login 了
from django.contrib import admin
from django.conf.urls import url, include
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('book1/', include('book.urls')),
path('book2/', include('book.urls')),
]
多個(gè)url,指向同一個(gè)app。
from django.urls import path
from . import views
urlpatterns = [
path('', views.book_list),
path('login', views.book_login, name="login"),
]
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from django.shortcuts import redirect,reverse
def book_list(request):
if request.GET.get("username"):
return HttpResponse("My book list !!!!")
else:
return redirect(reverse("login"))
def book_login(request):
return HttpResponse("Please Login!!!!")
通過上面案例,我們可以知道。
當(dāng)執(zhí)行http://127.0.0.1:8000/book2/ 的時(shí)候就會跳轉(zhuǎn)http://127.0.0.1:8000/book2/login
當(dāng)執(zhí)行http://127.0.0.1:8000/book1/ 的時(shí)候發(fā)現(xiàn)還是跳轉(zhuǎn)http://127.0.0.1:8000/book2/login
from django.contrib import admin
from django.conf.urls import url, include
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('book1/', include('book.urls'), namespace='book1')), #變更部分
path('book2/', include('book.urls'), namespace='book2')), #變更部分
]
from django.urls import path
from . import views
app_name = "book"
urlpatterns = [
path('', views.book_list),
path('login', views.book_login, name="login"),
]
def book_list(request):
#獲取當(dāng)前namespace名稱。
current_namespace = request.resolver_match.namespace #變更部分
if request.GET.get("username"):
return HttpResponse("My book list !!!!")
else:
print(current_namespace)
#動態(tài)返回命名空間信息
return redirect(reverse("%s:login"% current_namespace)) #變更部分
def book_login(request):
return HttpResponse("Please Login!!!!")
(1)include(module,namespace=Node)
(2)include((pattern_list,app_namesapace),namespace=None)
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
網(wǎng)頁標(biāo)題:Django命名空間app_name和namespace-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://chinadenli.net/article36/dsgcpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、軟件開發(fā)、靜態(tài)網(wǎng)站、網(wǎng)站營銷、定制網(wǎng)站、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容