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

Django admin变更表单自定义按钮跳转自定义视图出现URL错误如何解决

问题原因

1. 参数名不匹配

你在应用urls.py中定义的路径参数为<int:pk>,但send_email视图函数接收的参数名为requests_id,Django要求URL路由中定义的参数名必须和视图函数的参数名完全一致,否则无法完成参数传递,会触发URL匹配错误。

2. 主路由顺序错误

Django的路由规则是从上到下匹配,你将根路径直接指向admin站点path('', admin.site.urls),且放在了requests应用路由的前面,所有请求会优先被admin站点拦截,admin没有对应路由的请求会直接抛出错误,不会匹配到后面的requests应用路由。


解决方案

第一步:修正参数名不匹配问题,二选一即可:

  • 方案A:修改应用urls.py的参数名
# 应用内urls.py
urlpatterns = [
    # 将<int:pk>改为<int:requests_id>和视图参数对应
    path('<int:requests_id>/send-email/', views.send_email, name='send-email'),
]
  • 方案B:修改views.py的视图参数名
# views.py
# 将requests_id改为pk和路由参数对应
def send_email(request, pk):
    # 测试时可先返回HttpResponse验证路由通断,无需直接跳转
    from django.http import HttpResponse
    return HttpResponse(f"测试成功,接收的ID为{pk}")

第二步:调整主路由顺序

将更具体的requests应用路由放在admin路由前面,避免被admin拦截:

# 项目主urls.py
urlpatterns = [
    path('requests/', include('requests.urls')),
    path('', admin.site.urls),  # admin站点路由放最后
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

额外验证项

  • 确认requests应用已经添加到项目settings.py的INSTALLED_APPS列表中
  • 测试时先把视图的空redirect替换为直接返回响应,排除跳转逻辑本身的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:03