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

Django访问/polls/top/时出现NoReverseMatch错误的原因排查

解决你的Django NoReverseMatch错误

先帮你拆解下这个错误信息,一目了然:

NoReverseMatch at /polls/top/ Reverse for 'detail' with arguments '(1,)' not found. 1 pattern(s) tried: [ 'polls/top/int:pk/' ]

简单说:Django在尝试生成名为detail的URL、并传入参数1时,找不到对应的路由规则,它只找到了polls/top/<int:pk>/这条路径,但这条路径和detail视图不匹配。

下面是具体的问题点和修复方向:

1. 路由的name和视图对应错了

从错误里的尝试路径来看,你子应用的urls.py里肯定有一条路由写错了——大概率是把top相关的路由命名成了detail,或者把detail视图的路径设成了top/<int:pk>/。比如可能是这样:

# 错误的路由配置
path('top/<int:pk>/', views.top, name='detail')

这就导致Django找detail时,定位到了这条属于top的路由,但top视图根本不接收pk参数,自然匹配失败。

正确的做法是给detail视图单独配置路由,并且设置正确的name:

# 子应用urls.py 正确示例
from django.urls import path
from . import views

urlpatterns = [
    path('top/', views.top, name='top'),
    path('<int:pk>/', views.detail, name='detail'),  # 给detail视图配置带pk的路由,name设为detail
]

2. detail视图没接收pk参数

你的detail视图现在是这么写的:

def detail(request):
    data = Polls.objects.order_by('-created_at')
    return render(request,'detail.html',{'data':data})

但反向解析时你传了pk=1,说明这个视图应该用来展示单条Polls数据,而不是所有数据。必须修改视图,让它接收pk参数:

def detail(request, pk):
    # 推荐用get_object_or_404处理不存在的情况,避免报错
    from django.shortcuts import get_object_or_404
    data = get_object_or_404(Polls, pk=pk)
    return render(request,'detail.html',{'data':data})

3. 模板里的反向解析调用要对应

如果你在index.html里写了类似{% url 'detail' poll.id %},那必须确保路由里有名为detail、且接受int:pk参数的规则,否则就会触发这个错误。检查模板里的反向解析名称和路由的name完全一致,参数也匹配。

总的来说,就是路由name、视图参数、模板反向解析这三者没对齐,把这三个部分对应上,错误就解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:07:34