Django电商应用POST请求丢失URL参数致404错误求助
问题解决:Django编辑商品提交POST后URL丢失ID导致404
问题根源
复用的add-product.html模板中,表单的action属性设置为.,在访问编辑页面(URL为/mystore/edit-product/4)时,这个相对路径会被解析为父路径/mystore/edit-product/,而该路径没有对应的路由配置,因此POST请求返回404错误。
解决方案
方案一:动态生成表单提交地址(推荐)
通过在视图中传递正确的提交URL,确保新增和编辑场景都使用对应路由:
修改视图函数
导入reverse方法,在渲染模板时传递form_action参数:from django.urls import reverse # 顶部导入 @login_required def add_product(request): # 原有逻辑不变... return render(request, 'userprofile/add-product.html', { 'title': 'Add Product', 'form': form, 'form_action': reverse('add-product') # 新增此行 }) @login_required def edit_product(request, pk): # 原有逻辑不变... return render(request, 'userprofile/add-product.html', { 'title': 'Edit Product', 'form': form, 'form_action': reverse('edit-product', args=[pk]) # 新增此行 })更新模板表单
将表单的action改为动态传递的form_action:<form method="post" action="{{ form_action }}" enctype="multipart/form-data">
方案二:简化表单提交地址
直接将表单的action设为空字符串,表单会自动提交到当前页面的完整URL(包含商品ID):
<form method="post" action="" enctype="multipart/form-data">
验证修改
修改后,编辑商品时提交POST请求,会正确发送到/mystore/edit-product/4,匹配对应的edit_product视图处理表单,不会再出现404错误。
内容的提问来源于stack exchange,提问作者arcee123
相关产品推荐
相关产品推荐

