Django學習-10-命名空間


不使用命名空間,且兩個APP某條url使用相同的name屬性
 
app01_urls.py
1 urlpatterns = [
2     url(r'aaa/$', views.app01_aaa, name="index"),
3 ]
 
app02_urls.py
1 urlpatterns = [
2     url(r'aaa/$', views.app02_aaa, name="index"),
3 ]

 

各自的函數中同時反解URL

#app01.views
def aaa(request):
    return  HttpResponse(reverse("index"))

#app02.views
def aaa(request):
    return  HttpResponse(reverse("index"))

 

頁面顯示結果app01.views
1 #app01
2 
3 /app01aaa/
4 
5 
6 #app02
7 
8 /app01aaa/
  
 
總結
由於name沒有作用域,Django在反解URL時,會在項目全局順序搜索,當查找到第一個name指定URL時,立即返回
我們在開發項目時,會經常使用name屬性反解出URL,當不小心定義相同的name時,可能會導致URL反解錯誤,為了避免這種事情發生,引入了命名空間
 
 
解決
使用Django提供namespace參數
 
 
 
使用命名空間
 

app.urls必須添加變量

1 app_name = 'app01'

 

project_urls.py
from django.conf.urls import url,include

urlpatterns = [
    url(r'^aaa', include("app01.urls"),namespace='aaa')),
    url(r'^bbb', include("app02.urls"),namespace='bbb')),
]
 
app01_urls.py
from django.conf.urls import url
from app01 import views

app_name = "app01"

urlpatterns = [
    url(r'aaa/$', views.aaa, name="index"),
]
 

app02_urls.py

from django.conf.urls import url
from app01 import views

app_name = "app02"

urlpatterns = [
    url(r'aaa/$', views.aaa, name="index"),
]

 

app01_views.py
def aaa(request):
    return HttpResponse(reverse("app01:index"))

 

app02_views.py
def aaa(request):
    return HttpResponse(reverse("app02:index"))

 

驗證
 1 #http://127.0.0.1/aaa/aaa/
 2 
 3 # 結果:
 4 # /aaaaaa/
 5 
 6 
 7 #http://127.0.0.1/bbb/aaa/
 8 
 9 # 結果:
10 # /bbbaaa/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM