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

Django报错:Reverse for 'plan_edit'带空pk参数未找到匹配路由求助

解决Django Reverse for 'plan_edit' 错误的方案

这个报错本质是URL路由配置不匹配+模板变量传递错误导致的,我给你一步步拆解问题并给出修复方案:

1. 修正URL路由,添加PK参数捕获

你的plan_edit路由规则没有接收pk参数,但edit视图明确需要pk来获取对应的Planning对象,这是核心问题之一。

当前错误的路由:

url(r'^palan/edit$', views.edit, name='plan_edit'),

修改为带PK捕获的规则,让Django能把PK值传递给视图:

url(r'^palan/(?P<pk>[0-9]+)/edit/$', views.edit, name='plan_edit'),

这样路由就能匹配palan/123/edit/这类请求,同时自动把pk=123传给edit视图。

2. 修复模板中的变量名错误

在palan_detail.html里,你写了pk=post.pk,但这个模板的上下文变量是palan(从palan_detail视图传递的{'palan': palan, ...}),根本不存在post变量,导致传递的PK是空字符串,反向解析URL时自然找不到匹配的路由。

修改模板代码:

<a href="{% url 'plan_edit' pk=palan.pk %}">
    <h1>{{ palan.parcours }}</h1>
</a>

这样就能正确传递当前palan对象的PK值了。

3. 完善Edit视图的GET请求逻辑

当用户以GET请求访问编辑页面时,你没有初始化表单并传递给模板,会导致后续渲染表单时出现新错误。修正后的视图代码:

def edit(request, pk):
    post = get_object_or_404(Planning, pk=pk)
    if request.method == "POST":
        form = PostFormP(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.published_date = timezone.now()
            post.save()
            return redirect('palan_detail', pk=post.pk)
    else:
        # 初始化表单并传递给模板
        form = PostFormP(instance=post)
        return render(request, 'pages/plan_edit.html', {'form': form})

额外提醒:保持拼写一致性

注意到你代码里存在palan/plan拼写混用的情况(比如路由名plan_edit,视图名plani_new),尽量统一拼写,避免后续出现其他混淆问题。

按以上步骤修改后,这个反向解析的错误应该就能解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:47:22