争怎路由网:是一个主要分享无线路由器安装设置经验的网站,汇总WiFi常见问题的解决方法。

Django之url别名冲突处理方法

时间:2024/11/6作者:未知来源:争怎路由网人气:

url命名空间,可以让不同app下相同的url别名互不冲突。

下面通过一个案例来详细解释:

假如有一个Django项目名字是myproject,该项目下有app01和app02这2个应用。那么我们应该这样做路由分发:

项目总urls入口是/myproject/myproject/urls.py,它的内容如下:

from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 后台管理系统 path('app01/', include('app01.urls'),), path('app02/', include('app02.urls'),), ]

app01下urls入口是/myproject/app01/urls.py,它的内容如下:

from django.urls import path from app01.views import auth, view app_name = 'app01' # 应用命名空间 urlpatterns = [ path('register/', auth.register, name='register'), path('login/', auth.login, name='login'), path('logout/', auth.logout, name='logout'), path('index/', view.index, name='index'), ]

app02下urls入口是/myproject/app02/urls.py,它的内容如下:

from django.urls import path from app02.views import auth, view app_name = 'app02' # 应用命名空间 urlpatterns = [ path('register/', auth.register, name='register'), path('login/', auth.login, name='login'), path('logout/', auth.logout, name='logout'), path('index/', view.index, name='index'), ]

请认真看上面的案例,app01和app02下都有url别名login、logout、register,那么Django的redirect函数、reverse函数以及模板中的url函数怎么才能根据别名找到正确的url呢?

为了解决url别名命名冲突的情况,Django引入了url命名空间的概念,我们要做的是理解它,并遵循Django的规则来解决url别名冲突。

首先:按上面案例的方式书写urls,把项目的urls.py和应用的urls.py分开写。

其次:应用urls.py文件中要加一行app_name = app01 # 即app01应用所在的子目录名字。

最后:所有使用URL别名的地方都按"app01:login"这样的方式书写:

# reverse反向url解析函数: reverse(‘app01:login’) reverse(‘app02:login’) # redirect重定向函数: redirect(‘app01:index’) redirect(‘app02:index’) # Django模板的url写法: {% url ‘app01:logout’ %}

以上方式在使用别名时虽然多写了一下app子目录名字,稍微有点不方便。但这种方式可以彻底解决URL别名冲突。强烈建议在一开始写项目时就按这样的规范来写,不要等到项目越写越大才发现有好多个app有相同的url别名造成的bug,此时再要改动会非常麻烦!



关键词:Django之url别名冲突处理办法




Copyright © 2012-2018 争怎路由网(http://www.zhengzen.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版