You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django额外动作详情视图带参数:无末尾斜杠访问404问题排查

问题排查与解决方案

1. 检查APPEND_SLASH配置

打开项目settings.py,确认APPEND_SLASH值为True(Django默认配置)。若该值被设为False,Django不会自动将不带末尾斜杠的请求重定向到带斜杠版本,直接返回404。
若被修改过,恢复为:

APPEND_SLASH = True

2. 调整Action的URL正则匹配

你的abc_detail action的url_path正则未兼容不带末尾斜杠的请求,导致仅带斜杠的请求能匹配。修改正则表达式,允许末尾斜杠可选:

@action(detail=True, method=["get"], url_path=r"abc/(?P<name>[A-Za-z\.]+)/?")
def abc_detail(self, request, pk, name):
    # 你的业务逻辑代码
    ....

其中/?表示末尾斜杠为可选,同时匹配abc/xy.z和abc/xy.z/两种格式。

3. 修正冗余Action的路由问题

你定义的第一个abc action存在路由冲突风险:它标记了detail=True,但参数包含name却未在url_path中定义对应的捕获组,会导致该Action的URL无法正确生成,干扰正常路由匹配。建议要么补充该Action的url_path捕获组,要么直接删除冗余的abc Action。

4. 确认路由配置正确性

确保项目根URLconf中,ViewSet的路由配置使用DefaultRouter或SimpleRouter(二者默认处理末尾斜杠逻辑),示例配置如下:

from rest_framework.routers import DefaultRouter
from .views import MyViewSet

router = DefaultRouter()
router.register(r'employee', MyViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

内容的提问来源于stack exchange,提问作者TechSavy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:05:02