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

Django CreateView未跳转至success_url问题求助

Django CreateView 提交后无法跳转至success_url的解决方案

可能的原因及排查步骤

1. 表单模板未正确配置

这是最常见的问题,请检查delivery/delivery_form.html中的表单代码:

  • 必须使用method="POST"提交表单
  • 必须包含Django的CSRF令牌{% csrf_token %}
  • 避免错误的action属性(如果不需要指定,可省略,默认提交到当前URL)

正确的表单示例:

<form method="POST">
    {% csrf_token %}
    {{ form.name }}
    {{ form.email }}
    <!-- 其他表单字段 -->
    <button type="submit">提交订单</button>
</form>

2. form_valid方法存在隐性异常

虽然你能打印表单数据,但send_mail方法可能存在未捕获的异常,导致super().form_valid(form)未正常执行。可以添加异常捕获排查:

def form_valid(self, form):
    print(form.cleaned_data)
    try:
        self.send_mail(form.cleaned_data)
    except Exception as e:
        print(f"发送邮件出错: {e}")  # 打印异常信息
    return super(DeliveryFormView, self).form_valid(form)

3. success_url配置问题

尝试暂时将success_url替换为硬编码路径,排除reverse_lazy的问题:

success_url = '/order_completed'

如果硬编码能跳转,说明reverse_lazy的命名可能存在问题(你的代码中未使用命名空间,大概率不是此问题)。

4. 检查成功页面视图是否正常

直接访问/order_completed,确认OrderCompleted视图能正常渲染success.html页面,排除目标页面本身的错误。

5. AJAX提交导致重定向失效

如果你的表单是通过AJAX提交的,浏览器不会自动执行重定向。需要在AJAX回调中手动处理跳转:

// 假设使用jQuery提交AJAX
$('form').submit(function(e) {
    e.preventDefault();
    $.post($(this).attr('action'), $(this).serialize(), function(data) {
        window.location.href = '/order_completed';  // 手动跳转
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:45:45