博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django url 中的namespace详解
阅读量:5975 次
发布时间:2019-06-20

本文共 2238 字,大约阅读时间需要 7 分钟。

引子

  django是一个比较全能的web框架,比如它实现了自己的orm模型来对接不同的数据库、并提供了方便的数据接口;django牛逼的地方

  还有许多,如他实现了自己的模板语言,这样我们就能方便的做出数据驱动的动态网站;引入了app的概念而且app是可插拔的,这样代码

  的复用级别就更高了,不在是function级别或class级别。django的app是可以自由分发的、假设我写好了一个博客功能的app,你只要把这

  这app引入到你的网站,那么你的网站就有博客功能了。

 

  方便是不假、但是还是有一些要注意的地方、假设我的博客app中定义了一个叫“create”的url,如果你自己的app也定义一个叫“create”的

  url就会引起冲突了

 

  面对上面的问题一种可选的解决方案就是把url的名字起的尽可能的唯一、然而最好的解决方案就是引入“命名空间”为每一个app定义

  一个“命名空间”,通过“命名空间”来区分url

 

1、看一下没有引入命名空间的情况

  在这个例子中我会定义两个app分别叫app001、app002 每一个app都有自己的一个页面,由于我们app比较简单一个app就只有一个页面,

  我想把这个页面的url名字叫“main-page”,但是两个app都有一个叫“main-page”的页面就会引起冲突,所以我为了避免这件事情的发生

  我还要给不同的app中的“main-page”加上一个唯一的后缀。搞定之后整个项目看起来就像这样   

  

  整个项目看起来就像上面的图像一样了

 

  app001的关键内容如下:

  app001/view.py

from django.shortcuts import renderfrom django.http import Http404,HttpResponsedef main_page(request):    return render(request,"app001/main-page.html")

  app001/urls.py

from django.urls import pathfrom . import views#app_name="app001"urlpatterns = [    path('', views.main_page,name="main-page-xxx"),]

  app001/templates/app001/main-page.html

            app001 的主页                

app001

去往app001的主页

 

    app002的关键内容如下

  app002/view.py

from django.shortcuts import render# Create your views here.def main_page(request):    """    main_page function in app002    """    return render(request,'app002/main-page.html')

  app002/urls.py

from django.urls import pathfrom . import views#app_name="app002"urlpatterns = [    path('', views.main_page,name="main-page-yyy"),]

  app002/templates/app002/main-page.html

            app02的主页                

app002的主页

app002 main page

 

  在template中为了防止硬编码url路径,我使用了{% url 'url-name' %}来生成url,这个也是django的推荐使用习惯,为了防止url的名子重复

  我在第一个app里把“main-page”加上了后缀“xxx”,第二个里加上了“yyy”。这样做使得url的名字变长了不少,而且多出来的部分并没有特别

  的字句意义。

 

 

【2、引入命名空间】 

  命名空间的引入并不要做多少工作,只要在usrl.py文件中加一个“app_name”就可以了,在加入命名空间后模板中就可以直接通过命名空间来

  引用url了,下面以app001引入命名空间为例

from django.urls import pathfrom . import viewsapp_name="app001" #引入命名空间、命名空间的名字最好和app的名字相同urlpatterns = [    path('', views.main_page,name="main-page"),]

  引入名字空间之后就可以根据命名空间来引用url了

            app001 的主页                

app001

去往app001的主页

 

 

总结:

  引入命名空间后就算有相同的url名存在、也不会有问题,因为命名空间可以隔离它们了。

 

----

转载于:https://www.cnblogs.com/JiangLe/p/9197874.html

你可能感兴趣的文章
uC/OS-II源码分析(四)
查看>>
percona innobackupex 使用
查看>>
ORA-00257: archiver error. Connect internal only, until freed
查看>>
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
查看>>
Lync 2013就地升级到Skype for Business 2015-01
查看>>
Mac 系统不兼容移动硬盘无法识别怎么办
查看>>
php 二叉树 与赫夫曼树
查看>>
从产业链看技术的突破,第二届N+ VR&AR&MR技术高峰论坛圆满落幕
查看>>
ZABBIX3.0配置邮件报警
查看>>
马哥运维学习作业(二)
查看>>
php拆分数字字符串方法
查看>>
TCP/IP 某些最常见的错误原因码 (errno)列表
查看>>
spring整合redis缓存
查看>>
Install GPU TensorFlow From Sources w/ Ubuntu 16.04 and Cuda 8.0
查看>>
python线程,进程,协程
查看>>
linux命令:case选择结构语句
查看>>
crontab日志
查看>>
Win32系统下安装Win64补充说明
查看>>
spring boot 传递 List参数
查看>>
类的属性、类的方法、类的内置方法
查看>>