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
相关产品推荐
相关产品推荐

