当为 django 表单添加 `action` 属性跳转至感谢页时,数据未保存,根本原因是表单提交被直接发送到目标视图(而非原处理视图),导致业务逻辑未执行;正确做法是在原视图中完成验证与保存后,再通过 `redirect()` 显式跳转。
问题本质在于对 html 表单 action 属性与 django 视图职责的误解。当你将
✅ 正确流程应遵循 Django 推荐的 PRG 模式(Post-redirect-Get):
以下是修复后的 index 视图关键代码(含健壮性增强):
from django.shortcuts import render, redirect from django.contrib import messages def index(request): if request.method == 'POST': form_email = EmailForm(data=request.POST) form_message = EmailMessageForm(data=request.POST) if form_email.is_valid() and form_message.is_valid(): email_obj = form_email.save() # 保存 Email 实例 message_obj = form_message.save(commit=False) message_obj.email = email_obj message_obj.save() # ✅ 关键:成功后重定向,而非渲染感谢页 return redirect('home:contact_thank_you') else: # 可选:提示用户修正错误 messages.error(request, "请检查邮箱和留言内容是否填写正确。") else: form_email = EmailForm() form_message = EmailMessageForm() context = {'form_email': form_email, 'form_message': form_message} return render(request, 'home/index.html', context)
⚠️ 注意事项:
总结:Django 的表单处理核心在于「逻辑在视图,跳转靠 redirect」。抛弃 HTML action 的直连思维,拥抱服务端重定向,才能兼顾数据一致性、用户体验与安全性。
css 浮动与 inline block 布局有什么不同_从布局特性角度比较
html5可视化编辑怎么加进度条_html5可视化进度条制作教程【步骤】