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

重定向引发Page not found错误,附HTML及Django代码求助

解决表单提交后重定向引发的404错误

咱们从最常见的原因开始一步步排查,帮你解决这个问题:

1. 优先检查URL配置(urls.py)是否匹配

这是导致404最核心的原因——你的表单action指向了/app/save/,但如果这个路径没有在路由系统中映射到save视图,提交后自然会找不到页面。

情况1:直接在项目根urls.py配置

确保根urls.py有如下对应配置:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.top, name='top'),  # 对应top页面的根路径
    path('app/save/', views.save, name='save'),  # 必须和表单action完全一致
]

情况2:save视图在子app中(用include导入)

如果你的save视图属于某个子app,主项目urls.py会用include导入子app路由,此时子app的urls.py只需配置相对路径:

# 主项目urls.py
from django.urls import path, include
urlpatterns = [
    path('app/', include('your_subapp.urls')),
]

# 子app的urls.py
from django.urls import path
from . import views
urlpatterns = [
    path('save/', views.save, name='save'),  # 拼接后就是/app/save/,匹配表单action
]

2. 检查save视图的重定向逻辑

你提供的save视图代码未写完,但如果表单验证通过后使用了redirect(),一定要确保重定向目标是有效路径:

  • 推荐用视图名称(通过reverse)重定向,避免硬编码路径出错:
    from django.shortcuts import redirect, reverse, render
    from .forms import SaveForm
    
    def save(request):
        save_form = SaveForm(request.POST or None)
        if request.method == "POST" and save_form.is_valid():
            # 处理表单数据(比如保存到数据库)
            save_form.save()
            # 重定向到top页面,用视图名称更可靠
            return redirect(reverse('top'))
        # 表单无效或GET请求时,返回原页面(必须有这个返回,否则会报错)
        return render(request, 'top.html', {'save_form': save_form})
    
  • 如果硬编码路径,一定要确保路径正确,比如return redirect('/')(对应top页面的根路径),而非错误的路径。

3. 优化表单action的写法(避免路径错误)

你当前用了绝对路径/app/save/,没问题,但更推荐用Django模板标签{% url %}动态生成路径,彻底避免路径拼写错误:

<form method="POST" action="{% url 'save' %}">
  {% csrf_token %} <!-- 务必添加!Django默认要求CSRF令牌,否则会返回403禁止访问 -->
  <p>name:<input id="name" type="text" name="NAME"></p>
  <p>email:<input id="email" type="text" name="email"></p>
  <p><input type="submit" value="SEND"></p>
</form>

4. 确认APPEND_SLASH设置

Django默认APPEND_SLASH=True,会自动将无斜杠的路径重定向到带斜杠的版本,但如果你的settings.py中手动把它设为False,且路由路径与表单action的斜杠不一致,就会触发404。保持默认设置即可:

# settings.py
APPEND_SLASH = True

按照上面的步骤排查,基本就能解决这个重定向导致的404问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:17:15