Django中URL与参数正确却出现NoReverseMatch错误求助
解决Django的NoReverseMatch错误问题
我一眼就揪出问题所在了——你给assign_profile配置的URL正则表达式里,profile参数的匹配规则是[A-Za-z0-9]+,但你在模板里传的profile值是super_agent,这里面的下划线_不在允许的字符范围内,所以Django找不到对应的URL匹配,直接抛出了NoReverseMatch错误。
1. 核心修复:修改URL正则表达式
把assign_profile的URL配置里,profile参数的正则改成包含下划线的版本,这样就能匹配带下划线的字符串了:
url(r'assign/(?P<pk>[A-Za-z0-9]+)/profile/(?P<profile>[A-Za-z0-9_]+)/$', views.assign_profile, name='assign_profile'),
2. 额外验证点(避免踩其他坑)
顺便帮你排查下其他可能的小问题:
- 确认你的URL配置确实放在了
portfolio命名空间下(因为模板里用了portfolio:assign_profile),如果是在app的urls.py里,要确保主urls.py里include时指定了namespace:
# 主urls.py示例 url(r'^portfolio/', include('portfolio.urls', namespace='portfolio')),
- 你的
agent.code_agent值是1,这个完全符合pk的正则[A-Za-z0-9]+,这部分没问题。
3. 测试修复效果
修改完正则后,重启Django服务,再访问对应的页面,应该就能正常生成URL,不会再出现NoReverseMatch错误了。
内容的提问来源于stack exchange,提问作者Armando Sudi
相关产品推荐
相关产品推荐

