Django Form提交成功后重定向返回页面CourseForm为空问题
问题原因
- 提交表单后地址栏未跳转:你在
addassessment视图中校验表单通过后,直接调用render返回了课程列表模板,没有触发重定向,相当于在addassessment的请求路径下直接渲染了课程页的内容,所以URL不会变化。 CourseForm未加载:你在addassessment视图里构造的上下文没有包含CourseForm的实例,渲染课程模板时找不到form变量,自然不会显示表单字段。
修复方案
修改gradebook/views.py中的addassessment视图即可:
- 先确认视图顶部导入了重定向相关方法:
from django.shortcuts import redirect, reverse
- 找到表单保存成功后的返回逻辑,把原来的
render调用替换为重定向:
def addassessment(request, course_id): # 原有其他代码不变 if request.method == 'POST': form = AssessmentForm(request.POST) if form.is_valid(): assess = form.save(commit=False) assess.course = this_course assess.save() form.save_m2m() # 删掉原来的return render(...),替换为下面这行 return redirect(reverse('gradebook:courses')) # 原有其他代码不变
补充说明
表单提交成功后使用重定向是Django的最佳实践,既可以避免用户刷新页面导致的重复提交问题,也能保证跳转后的页面走对应视图的完整渲染逻辑,不会出现上下文缺失的问题。
内容的提问来源于stack exchange,提问作者Doug Smith
相关产品推荐
相关产品推荐

