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

Django编辑分类提交POST请求时出现ERROR 404页面未找到问题

Django分类编辑POST请求404问题排查

1. URL路由不匹配

编辑视图的POST请求大概率没对应上带ID的URL路由。比如你可能只配置了GET请求的/category/edit/<int:pk>/,但POST提交的URL没包含ID,或者URL模式没允许POST方法。
检查URLconf里的编辑路由,必须包含pk参数,并且视图支持POST方法:

# 错误写法:缺pk或只支持GET
path('category/edit/', views.CategoryEditView.as_view(), name='category_edit')
# 正确写法:包含pk,视图默认支持GET/POST
path('category/edit/<int:pk>/', views.CategoryEditView.as_view(), name='category_edit')

2. 表单action属性错误

模板里的表单action大概率没指向正确的带ID编辑URL。比如写死了action="/category/edit/",没传入当前分类的ID。
检查模板中的表单标签:

<!-- 错误写法:action不带pk -->
<form method="post" action="{% url 'category_edit' %}">
<!-- 正确写法:传入当前分类的pk -->
<form method="post" action="{% url 'category_edit' category.pk %}">
  {% csrf_token %}
  <!-- 表单字段 -->
</form>

也可以直接省略action,让表单默认提交到当前页面URL,更稳妥。

3. 视图逻辑问题

如果用类视图(比如UpdateView),要确认model、form_class设置正确,get_object方法能正常获取对象。如果是自定义函数视图,要保证POST请求时能正确接收pk参数并查询对象:

# 函数视图示例:POST分支必须正确获取对象
def category_edit(request, pk):
    category = get_object_or_404(Category, pk=pk)
    if request.method == 'POST':
        form = CategoryForm(request.POST, instance=category)
        if form.is_valid():
            form.save()
            return redirect('category_list')
    else:
        form = CategoryForm(instance=category)
    return render(request, 'category_edit.html', {'form': form})

要是类视图重写了post方法,别错误重定向到不存在的URL,也别漏处理pk参数。

4. CSRF令牌缺失(虽常见403,但可能引发异常跳转)

务必确保表单里有{% csrf_token %},否则Django会拒绝POST请求,若错误处理逻辑有问题,可能跳转到404页面。

5. 对象或权限问题

虽然GET能加载数据,但POST时如果对象已被删除,或者视图权限限制导致无法访问对象,也会返回404。检查get_object_or_404是否在POST分支正确调用,或者权限装饰器是否影响了POST请求。


内容的提问来源于stack exchange,提问作者Davi Souza de Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:33:09