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

Django reverse match错误:传递slug或主键无法匹配change_friends路由

解决Django中change_friends的Reverse Match错误

我来帮你搞定这个reverse match的问题!这种错误大多是因为生成URL链接时,传递的参数不符合URL定义要求,或者参数缺失导致的。结合你给出的friends.urls.py代码,我们一步步排查解决:

1. 确认Reverse时的参数传递是否完整且正确

你的URL规则定义了两个必填参数:<slug:operation>和<int:pk>,不管是在模板里用{% url %}标签,还是在视图里用reverse()函数,必须同时传递这两个参数,缺一不可。

模板中的正确写法示例

比如要给ID为user.id的用户添加好友:

<a href="{% url 'friends:change_friends' operation='add' pk=user.id %}">添加好友</a>

删除好友的话就把operation换成remove:

<a href="{% url 'friends:change_friends' operation='remove' pk=user.id %}">删除好友</a>

视图中的正确写法示例

如果在视图里需要生成这个URL跳转:

from django.urls import reverse
from django.http import HttpResponseRedirect

def some_view(request, target_user_id):
    # 生成添加好友的URL
    add_friend_url = reverse(
        'friends:change_friends',
        kwargs={'operation': 'add', 'pk': target_user_id}
    )
    return HttpResponseRedirect(add_friend_url)

2. 检查参数类型是否匹配URL定义

你的URL里用了<slug:operation>,slug类型要求参数是仅包含字母、数字、下划线和连字符的字符串,所以要确保你传递的operation值符合这个规则(比如用add、remove这种简单字符串就没问题,别用带空格或特殊字符的值)。而<int:pk>要求必须是整数,传递的时候别传字符串类型的数字哦。

3. 确认命名空间是否正确使用

你已经设置了app_name = 'friends',所以在调用reverse的时候,必须加上这个命名空间(也就是friends:change_friends),不能直接写change_friends,否则Django找不到对应的URL规则。

只要把这几点都检查到位,reverse match的错误应该就能解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:49