Django 中如何处理多个 URL 匹配的情况?

2023-04-11 00:00:00 多个 匹配 如何处理

在 Django 中,当有多个 URL 匹配时,Django 会按照 URL 的顺序循环匹配,直到找到匹配的 URL 为止。如果一个 URL 段匹配多个 URL 模式,则 Django 会使用第一个匹配成功的模式。

例如,我们有以下两个 URL 模式:

path('pidancode/', views.pidancode_view),
path('<slug:username>/', views.user_view),

当用户访问 pidancode/ 时,Django 会匹配第一个模式并执行 pidancode_view。而当用户访问 皮蛋编程/ 时,Django 会匹配第二个模式并执行 user_view

如果我们想要让 pidancode/ 也能匹配第二个模式,我们需要将第二个模式的顺序调整为:

path('<slug:username>/', views.user_view),
path('pidancode/', views.pidancode_view),

这样当用户访问 pidancode/ 时,Django 会先匹配第一个模式,因为 pidancode 不是一个合法的 slug,所以匹配失败,然后匹配第二个模式并执行 pidancode_view

代码演示:

from django.urls import path
from . import views

urlpatterns = [
    path('<slug:username>/', views.user_view),
    path('pidancode/', views.pidancode_view),
]

其中,views.pidancode_viewviews.user_view 分别是两个视图函数的名称。

相关文章