Django 2.0.4+AWS RDS MySQL打开博客文章出现NoReverseMatch错误求助
解决Django的NoReverseMatch错误(like_action的pk为空)
嘿,我来帮你搞定这个问题!这个NoReverseMatch错误的原因非常明确——Django在反向生成like_action的URL时,发现你传递的pk是空字符串'',但你的URL模式要求pk必须是数字([0-9]+),所以匹配失败了。下面我一步步给你分析排查方向:
1. 定位问题发生的位置
这个错误大概率出现在两个地方:
- 博客文章详情页的模板里(你打开
/1/时触发,说明页面渲染时就调用了like_action的URL反向解析) - 某个视图函数里用
reverse()或redirect()生成like_action的URL时
2. 检查模板中的URL调用
先去你的文章详情模板(比如post_detail.html)里找调用like_action的代码,比如点赞按钮的链接。正确的写法应该是这样的:
<a href="{% url 'like_action' pk=post.pk %}">点击点赞</a>
你要确认:
- 模板上下文里确实有
post这个对象(也就是你的文章详情视图已经把文章实例传到模板里了) post.pk不是空值(文章已经被正确保存到数据库,有有效的主键)
如果你的模板里写的是pk=''或者变量名写错了(比如写成pk=article.id但上下文里没有article),就会触发这个错误。
3. 检查视图中的反向解析
如果是在like_action视图或者其他视图里用了reverse(),比如:
from django.shortcuts import redirect, reverse def some_view(request): # 这里如果pk是空的就会出错 return redirect(reverse('like_action', kwargs={'pk': some_pk}))
要确保some_pk是从正确的地方获取的有效数字,比如从请求参数、数据库对象里拿到,而不是空字符串或None。
4. 额外确认几个点
- 你的URL配置里,
like_action的命名是对的:比如在urls.py里是path('<int:pk>/like_action/', views.like_action, name='like_action')(或者你用的正则模式(?P<pk>[0-9]+)/like_action/$,只要name='like_action'没错就行) - 你的文章对象确实存在于AWS RDS的MySQL数据库里,
/1/对应的文章主键是1,能正常被视图获取到
如果按照上面的步骤排查后还是有问题,可以把模板中调用URL的代码和like_action的完整视图代码贴出来,我再帮你精准定位!
内容的提问来源于stack exchange,提问作者leonkong
相关产品推荐
相关产品推荐

