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

如何用HttpResponseRedirect避免Django表单重复提交?遇404问题求助

问题解答

核心结论

用HttpResponseRedirect是完全正确的解决方向,这是Web开发中标准的Post/Redirect/Get(PRG)模式,专门用来避免刷新页面重复提交表单的问题。你遇到的404错误只是跳转路径配置错误,和这个方案本身无关。

错误原因分析

你写的return HttpResponseRedirect('startandstoptimes/index.html')是硬编码了跳转路径,但你的URL配置里根本没有匹配这个路径的规则:

  • 项目urls把根路径('')指向了应用startandstoptimes的urls
  • 应用urls里只有根路径('')对应start_or_end_fast视图,没有startandstoptimes/index.html这个路径,所以会返回404。

修复方案

1. 使用Django的reverse函数跳转(推荐)

用URL名称反转生成正确的跳转地址,避免硬编码路径出错:

  • 首先导入reverse:
from django.urls import reverse
  • 修改视图中的返回语句:
def start_or_end_fast(request):
    if request.method == 'POST' and 'start_fast' in request.POST:
        add_fast = logTimes(fast_finished=False, start_date_time=datetime.now(), end_date_time=datetime.now())
        add_fast.save()
        print(add_fast.start_date_time, add_fast.end_date_time) 
        print('Fast started')
        # 用URL名称反转跳转,回到视图对应的页面
        return HttpResponseRedirect(reverse('start_or_end_fast'))
    # 处理GET请求,渲染页面
    return render(request,'startandstoptimes/index.html')

2. 直接跳转根路径(简单但不推荐)

如果不想用reverse,也可以直接跳转到根路径,但硬编码路径不利于后续维护:

return HttpResponseRedirect('/')

补充说明

  • 视图必须处理GET请求:你之前注释的return render是在POST后直接渲染,现在把它移到GET分支,确保用户访问页面时(GET请求)能正常显示HTML。
  • PRG模式的原理:POST提交后跳转到GET请求的页面,刷新页面时只会重新发送GET请求,不会重复提交POST数据,从根本上避免重复提交问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:15:37