小白网-奉贤部落-奉贤免费信息发布平台

查看: 21|回复: 0
打印 上一主题 下一主题

Django之url别名冲突解决方法

[复制链接]

2万

主题

2万

帖子

7万

积分

论坛元老

Rank: 8Rank: 8

积分
78182
跳转到指定楼层
楼主
发表于 2025-7-26 13:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
命名url 空可以让不同app下的相同url别名互不冲突。
下面是一个案例来详细说明:
如果有一个名为myproject的Django项目,那么这个项目中有两个应用程序:app01和app02。那么我们应该做这样的路线分配:
项目的总urls条目为/myproject/myproject/urls.py,其内容如下:
from django.contrib导入adminfrom django.urls导入路径,includeURL patterns =[path(' admin/',admin.site.urls),#后台管理系统 path ('app01/',include ('app01。URL '),), path ('app02/'),include ('app02。网址'),),]
app01下的urls条目是/myproject/app01/urls.py,其内容如下:
从django.urls导入路径从app01.views导入auth,viewapp _ name = ' app 01 ' #[/k0/]URL模式= [ path ('register/'),auth.register,name='register '), path('login/',auth.login,name='login '),path('logout/',auth.logout,name='logout '),path(' '
app02下的urls条目是/myproject/app02/urls.py,其内容如下:
从django.urls导入路径从app02.views导入auth,viewapp _ name = ' app 02 ' #[/k0/]URL模式= [ path ('register/'),auth.register,name='register '), path('login/',auth.login,name='login '),path('logout/',auth.logout,name='logout '),path(' '
请仔细看上面的案例。app01和app02下有url别名登录、注销和注册。那么Django在模板中的重定向函数、反向函数、url函数如何根据别名找到正确的url呢?
为了解决url别名命名冲突,Django引入了url命名空的概念。我们需要做的是理解它,并遵循Django的规则来解决url别名冲突。
首先:按照上面案例的方式写URL,把项目的urls.py和应用的urls.py分开写。
其次,在应用程序urls.py文件中添加一行app_name = app01 #,即应用app01的子目录名称。
最后;所有使用URL别名的地方都以“app01:login”的方式编写;
# reverse反向url解析函数:reverse(' app 01:log in ')reverse(' app 02:log in ')# redirect重定向函数:redirect(' app 01:index ')。# Django模板的url写为 {%URL' app01: logout'%}
上面的方法有点不方便,虽然在使用别名的时候app子目录的名称写的比较多。但是这种方法完全可以解决URL别名冲突。强烈建议一开始就按照这个规范来写项目。不要等到项目越做越大的时候,才发现很多现有的app用相同的url别名造成的bug。这个时候再做改动会很麻烦!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白网-奉贤部落-奉贤免费信息发布平台  

GMT+8, 2025-8-21 17:18 , Processed in 0.052242 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表