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

Django gallery编辑功能二次访问URL路径重复导致404错误求助

问题原因
  • 路由配置不符合Django默认规则:urls.py中定义的edit_gallary路由缺少末尾斜杠,Django默认开启APPEND_SLASH配置,访问不带末尾斜杠的路由时会自动301重定向到带斜杠的地址,浏览器基于相对路径拼接后续请求地址时,就会出现路径段重复的问题。
  • 表单提交路径未明确指定:edit_gallary.html中的表单action属性为空,空值默认会以当前页面地址作为相对路径提交表单,结合重定向逻辑,会重复拼接edit_gallary路径段。
  • 视图逻辑不符合PRG规范:edit_gallary视图处理POST请求成功后,直接render返回页面而非跳转重定向,浏览器地址栏会停留在表单提交地址,后续发起同路径请求时会触发相对路径拼接错误。
解决方案
  1. 修正urls.py路由配置,补充末尾斜杠,调整路由命名方便反向解析:
# 替换原有edit_gallary路由配置
path('edit_gallary/<int:gallaryid>/', views.edit_gallary, name="edit_gallary"), 
  1. 修正edit_gallary.html的表单配置,使用Django模板反向解析明确指定提交地址:
<!-- 替换原有form标签 -->
<form action="{% url 'edit_gallary' gallaryid=gallaryid %}" method="post" enctype="multipart/form-data">

同时建议模板内其他跳转链接(比如Back按钮的href="insert_school")也改为{% url %}反向解析格式,避免后续路径变动出现同类问题。

  1. 修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:27:02