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/

复制代码

出处:https://www.cnblogs.com/cq146637/p/7806336.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值