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

Django项目模型更新功能报错:找不到update-project反向路由

Django更新项目功能路由错误排查解决

错误原因

这个错误的核心是:模板解析{% url 'update-project' project.id %}时,project.id的值为空字符串,而你的URL配置要求必须传入一个整数类型的pk参数,导致路由反向解析失败。

排查与解决步骤

1. 确认模板所在页面的视图已正确传递project变量

  • 如果Edit链接在项目列表页:列表视图必须将所有项目对象传入模板,且模板需通过循环遍历每个项目:
    列表视图示例:
    def project_list(request):
        projects = Project.objects.all()
        return render(request, 'projects/project_list.html', {'projects': projects})
    
    模板循环示例:
    {% for project in projects %}
      <li><a href="{% url 'update-project' project.id %}">Edit</a></li>
    {% endfor %}
    
  • 如果Edit链接在项目详情页:详情视图必须将当前项目对象放入context:
    详情视图示例:
    def project_detail(request, pk):
        project = Project.objects.get(id=pk)
        return render(request, 'projects/project_detail.html', {'project': project})
    

2. 检查模板中project变量的正确性

  • 确保模板中使用的变量名和视图传入的完全一致(比如视图传的是project,模板不能写成proj或其他拼写错误)。
  • 可以在模板中临时添加{{ project.id }}测试输出,确认是否显示有效数字,而非空值。

3. 可选优化:简化视图的表单处理逻辑

你当前手动获取POST数据赋值的方式可以用Django表单的内置方法简化,减少出错概率:

@login_required
def updateProject(request, pk):
    project = Project.objects.get(id=pk)
    form = ProjectForm(request.POST or None, instance=project)
    
    if request.method == 'POST' and form.is_valid():
        form.save()
        return redirect('project', pk=project.id)
    
    context = {'form': form, 'project': project}
    return render(request, 'projects/project_form.html', context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:55:59