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

Django访问/watchlist/报NoReverseMatch:viewList路由参数为空匹配失败

错误原因

  • 观察列表模板变量引用错误:在watchlist.html的for循环中,你遍历的集合变量是watchers_items,单条记录命名为post,但View按钮的url反向解析时使用了listing.id,模板上下文没有传入listing变量,导致listing.id为空,反向解析viewList路由时缺少必填的id参数,直接触发NoReverseMatch报错。
  • urls.py存在语法错误:path('watchlist/', views.watchlist_list, name='watchlist_list') 行末尾缺少逗号,会导致后续路由解析异常。
  • 视图函数存在拼写错误:watchlist_post、watchlist_list两个函数中均将参数request错误拼写为requset,运行时会触发未定义变量报错。

解决方案

  1. 修正观察列表页面的变量引用
    将watchlist.html中View按钮的代码替换为:
<a href="{% url 'viewList' post.id %}" class="btn btn-dark btn-sm m-1 btn-block">View</a>

和循环的单条记录变量名保持一致即可。

  1. 修正urls.py语法错误
    补充路由末尾的逗号,修正后的urlpatterns代码如下:
urlpatterns =[
        # Watchlist
         path('Post/<int:id>/watchlist_post/change/<str:reverse_method>',
         views.watchlist_post, name='watchlist_post'),
         path('watchlist/', views.watchlist_list, name='watchlist_list'),
         path('Post/<int:id>', views.viewList, name='viewList'),

]
  1. 修正视图函数的拼写错误
    将watchlist_post、watchlist_list两个函数中所有的requset替换为正确的request即可,修正后的示例代码:
@login_required
def watchlist_post(request, id, reverse_method):
    listing = get_object_or_404(Post, id=id)
    if listing.watchers.filter(id=request.user.id).exists():
        listing.watchers.remove(request.user)
    else:
        listing.watchers.add(request.user)
    if reverse_method == "viewList":
        return viewList(request, id)
    return HttpResponseRedirect(reverse(reverse_method))


@login_required
def watchlist_list(request):
    user = request.user
    watchers_items = user.favorite.all()
    context = {
        'watchers_items': watchers_items
    }
    return render(request, 'auctions/watchlist.html', context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:02