Django gallery编辑功能二次访问URL路径重复导致404错误求助
问题原因
- 路由配置不符合Django默认规则:urls.py中定义的
edit_gallary路由缺少末尾斜杠,Django默认开启APPEND_SLASH配置,访问不带末尾斜杠的路由时会自动301重定向到带斜杠的地址,浏览器基于相对路径拼接后续请求地址时,就会出现路径段重复的问题。 - 表单提交路径未明确指定:edit_gallary.html中的表单
action属性为空,空值默认会以当前页面地址作为相对路径提交表单,结合重定向逻辑,会重复拼接edit_gallary路径段。 - 视图逻辑不符合PRG规范:edit_gallary视图处理POST请求成功后,直接render返回页面而非跳转重定向,浏览器地址栏会停留在表单提交地址,后续发起同路径请求时会触发相对路径拼接错误。
解决方案
- 修正urls.py路由配置,补充末尾斜杠,调整路由命名方便反向解析:
# 替换原有edit_gallary路由配置 path('edit_gallary/<int:gallaryid>/', views.edit_gallary, name="edit_gallary"),
- 修正edit_gallary.html的表单配置,使用Django模板反向解析明确指定提交地址:
<!-- 替换原有form标签 --> <form action="{% url 'edit_gallary' gallaryid=gallaryid %}" method="post" enctype="multipart/form-data">
同时建议模板内其他跳转链接(比如Back按钮的href="insert_school")也改为{% url %}反向解析格式,避免后续路径变动出现同类问题。
- 修正views.py视图逻辑,POST请求成功后重定向到列表页,同时补充模板需要的参数:
# 头部如果未导入redirect请先添加 from django.shortcuts import redirect def edit_gallary(request,gallaryid): table = gallary.objects.get(id=gallaryid) gallary_form = gallaryform(instance=table) if request.method=='POST': form = gallaryform(data=request.POST, files=request.FILES, instance=table) if form.is_valid(): form.save() # 此处替换为你实际的gallery列表页路由name即可 return redirect('gallary_list') # 补充gallaryid参数给模板反向解析使用 context = {'gallary_form':gallary_form, 'gallaryid': gallaryid} return render(request,'edit_gallary.html',context)
内容的提问来源于stack exchange,提问作者Aryan sanchiya
相关产品推荐
相关产品推荐

