名称空间

作者: 乔治大叔 | 来源:发表于2018-12-10 17:27 被阅读11次

命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回

我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。

创建一个app02:python manage.py startapp app02

urls.py

from django.urls import path,re_path,include
urlpatterns = [
    path('app01/', include('app01.urls')),
    path('app02/', include('app02.urls'))
]

app01 的urls.py

from django.urls import path,re_path
from app01 import views
urlpatterns = [
    re_path(r'index/',views.index,name='index'),
]

app02 的urls.py

from django.urls import path, re_path, include
from app02 import views

urlpatterns = [
    re_path(r'index/', views.index,name='index'),

]

app01的视图函数

def index(request):
    url=reverse('index')
    print(url)
    return HttpResponse('index app01')

app02的视图函数

def index(request):
    url=reverse('index')
    print(url)
    return HttpResponse('index app02')

这样都找index,app01和app02找到的都是app02的index

如何处理?在路由分发的时候指定名称空间

总urls.py在路由分发时,指定名称空间

url(r'app01/',include(('app01.urls','app01'))),
url(r'app02/',include(('app02.urls','app02')))

在视图函数反向解析的时候,指定是那个名称空间下的

 url=reverse('app02:index')
 print(url)
 url2=reverse('app01:index')
 print(url2)

在模版里:

<a href="{% url 'app02:index'%}">哈哈</a>

相关文章

  • 名称空间

    引言 C 的全局性名称空间容易生成名称冲突的问题。想法1:名称属于编译单元,需要使用 extern 来公开。 失败...

  • 名称空间

    命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的...

  • Hbase

    创建名称空间 create_name ‘名称’ 展示名称空间 list_namespace 列出名称空间的所有表 ...

  • 1.Python语言基础

    Python的名称空间与作用域 名称空间名称空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通...

  • 15.Python之名称空间与作用域

    Python之名称空间与作用域 名称空间名称空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通...

  • Python名称空间

    用一个全家桶一样的例子开启讨论! 下面来逐个分析一下。 在逐个分析之前,对python的名称解析做一下说明。pyt...

  • xml名称空间

    原文链接http://zhhll.icu/2020/xml/xml%E5%90%8D%E7%A7%B0%E7%A9...

  • 11. Python之名称空间与作用域

    1 名称空间 1.1 内置名称空间 1.1.1 存放的名字 1.1.2 存活周期 1.2 全局名称空间 1.2.1...

  • Python之路11:函数之命名空间,闭包,生成器,迭代器

    命名空间 名称空间是存放变量名和赋值绑定关系的地方 名称空间共 3 种: locals: 是函数内的名称空间,包括...

  • C#随笔1

    1命名空间 语法 namespace 命名空间名称{若干个类型} ORnamespace 命名空间名称.子命名...

网友评论

    本文标题:名称空间

    本文链接:https://www.haomeiwen.com/subject/wqjdhqtx.html