Django路由配置:同一App下path name重名覆盖机制解析
本文详解Django中urls.py的path name定义规则。重点说明同一App内路由别名不可重名,后者将覆盖前者;不同App间可重名,需通过app_name配合冒号操作符在模板中调用。结合Django 4.0.3版本,提供代码示例与模板调用方法,帮助开发者避免路由冲突并规范命名空间使用。
Django url path
在Django项目中,路由配置主要在 urls.py 文件中完成。
path()函数的标准语法为:path('浏览器地址栏显示的URL路径', '对应的视图处理函数', '路由别名name')。
例如:path('app1/screen001/list', screen001_view.list, name='list')
需要注意:在同一个App内部,路由别名(name)不能重复定义。如果定义了相同的name,后出现的定义会覆盖先前的定义。
而在不同的App之间,路由别名可以相同。此时在模板中调用时,需要指定App的名称,格式为:{% url "app名称:路由别名" %}。
※Django version 4.0.3
project :
pj
├── app1
│ │ urls.py
│ │ screen001_views.py
│ │ screen002_views.py
│ └── ...
│
├── app2
│ │ urls.py
│ │ screen003_views.py
│ └── ...
│
├── pj
│ │ settings.py
│ │ urls.py
│ └── ...
│
└── templates
└──app1
│ │ screen001.html
│ │ screen002.html
│ └── ...
└──app2
│ screen003.html
└── ...url.py 路由别名
pj>url.py
from django.urls import path
from django.conf.urls import include
from .views import example_view
urlpatterns = [
path('', include('core.urls')),
path('app1/', include('app1.urls')),
path('app2/', include('app2.urls')),
]app1>url.py
from django.urls import path
from .views import screen001_view, screen002_view
# 定义实例命名空间
app_name = 'app1'
urlpatterns = [
# 画面1
path('app1/screen001/list', screen001_view.list, name='list'), # 路由别名 list ⇒ s1_list
path('app1/screen001/search', screen001_view.search, name='search'),
# 画面2
path('app1/screen002/list', screen002_view.list, name='list'), # 路由别名 list ⇒ s2_list
]以路由别名【list】为例,如果在同一App下重复定义,后定义的【screen002_view.list】将会覆盖前一个,导致调用时始终指向后者。
不过,我们可以为同一个视图函数定义不同的路由别名,从而让同一个处理函数服务于两个不同的访问入口或群体。
app2>url.py
from django.urls import path
from .views import screen003_view
# 定义实例命名空间
app_name = 'app2'
urlpatterns = [
# 画面3
path('app2/screen003/list', screen003_view.list, name='list'), # 路由别名 list ⇒ 不同app下可以重名
]调用方法:
被指定的命名空间URL在模板中使用':'(即冒号)操作符进行分隔。
{% url "app名称:路由别名" %}HTML(template)调用实例
<form action="{% url 'app1:app1_s1_list' %}" method="post">window.open("{% url 'app1:app1_s1_search' %}?id=" + row['id'], '_blank');function delete_file(id){
$.ajax({
'url': '{% url "app1:app1_s1_list" %}',
'type': 'POST',
'data': JSON.stringify({id:id}),
'contentType': "application/json",
'dataType': 'json'
}).done(function (response) {
console.log("success");
}).fail(function(jqXHR, textStatus, errorThrown){
console.log("システムエラー["+textStatus+"]"+errorThrown);
});同一app下 name 定义
不能重名,若重名,后者会覆盖前者
路由别名定义:

重复定义
画面表示:log (后者被调用)

参考官方文档 URL调度器
以上就是Django url.py path name同一app下路由别名定义的详细内容,更多关于Django url.py path别名定义的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













