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

添加app_name='blog'后遭遇add_comment反向解析失败问题求助

解决Django中Reverse for 'add_comment' 错误:参数不匹配问题

嘿,这个错误其实很典型,咱们一步步拆解解决:

首先抓准错误信息的核心:

Reverse for 'add_comment' with keyword arguments '{u'slug': None}' not found. 尝试的匹配模式为[u'blog/(?P\d+)/comment/$']

问题根源很明确:你在生成add_comment的URL时,传递了slug参数(而且这个值还是None),但你的URL配置里定义的是接收pk参数(数字类型),两者完全不匹配,所以Django找不到对应的路由。

接下来咱们逐个检查相关文件:

1. 检查模板add_comment.html中的URL调用

你大概率在模板里写了类似这样的代码:

{% url 'blog:add_comment' slug=post.slug %}

但根据你的URL规则,应该改成传递pk参数:

{% url 'blog:add_comment' pk=post.pk %}

同时要确保post对象是有效的(不是None)——比如渲染模板的视图里,已经通过get_object_or_404之类的方法正确获取了Post实例并传递给模板。

2. 检查views.py中的reverse调用

如果你的视图里用reverse生成跳转URL,比如:

return redirect(reverse('blog:add_comment', kwargs={'slug': post.slug}))

同样要把参数改成pk:

return redirect(reverse('blog:add_comment', kwargs={'pk': post.pk}))

这里也要确认post实例存在,避免因为post为None导致pk为空的情况。

3. 确认urls.py的配置正确性

你的URL配置方向是对的,再核对一下add_comment的条目:

# blog/urls.py
app_name = 'blog'
urlpatterns = [
    # ...其他URL规则
    path('<int:pk>/comment/', views.add_comment, name='add_comment'),
    # 如果你用的是re_path写法:re_path(r'^(?P<pk>\d+)/comment/$', views.add_comment, name='add_comment'),
]

这里明确用了pk作为捕获的参数名,所以生成URL时必须传pk而不是slug。

额外排查:为什么slug会是None?

如果你的Post模型里slug字段允许为空,或者创建Post时没自动生成slug,就会导致post.slug为None。不过即使slug有值,你的URL规则也不需要它,所以重点还是切换到pk参数即可。

总结一下:把所有生成add_commentURL的地方,从传递slug改成传递pk,同时确保传递的pk对应有效的Post实例,这个错误就能解决啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:00:06