Django SessionWizardView 页面重新加载后跳回第一步
Posted
技术标签:
【中文标题】Django SessionWizardView 页面重新加载后跳回第一步【英文标题】:Django SessionWizardView jumps back to the first step after page is reloaded 【发布时间】:2012-09-22 12:55:10 【问题描述】:我正在使用 SessionWizardView
管理两个表单。例如,当我在最后一步重新加载页面时,我又回到了第一步,必须再次输入所有字段。
这是预期的行为吗?如果是这样,是否有可能回到我重新加载页面之前的步骤?当然,所有字段都应相应填写。
class ManufacturingCalculatorWizard(SessionWizardView):
def get_template_names(self):
TEMPLATES =
"blueprint": "manufacturing/forms/select_blueprint.haml",
"calculator": "manufacturing/forms/calculator.haml"
return [TEMPLATES[self.steps.current]]
def done(self, form_list, **kwargs):
form_data = [form.cleaned_data for form in form_list]
rcontext = RequestContext(self.request, 'data' : calculate_manufacturing_job(form_data) )
return render_to_response('manufacturing/forms/result.haml', rcontext)
【问题讨论】:
reload的时候,你也发布数据吗? 浏览器询问我是否要重新发送表单。是的,看来我又要发送帖子数据了。 我在我的代码中看不到这种行为。您可能想发布向导视图代码、模板代码。 @Rohan 我添加了向导的代码。 我有一个怀疑。这是done
方法。我有三个步骤。第一步=表单,第二步=表单,第三步是done
方法返回的结果页面。重新加载第一步和第二步有效,但重新加载结果页面出错。所以FormWizardView
本身正在工作。现在的问题是:如何重新加载结果页面并基本触发done
方法?
【参考方案1】:
在done
方法之后呈现的页面不是向导的一部分,因此当您重新加载它时,django 将尝试重定向到第一页作为向导的新会话。
如果您想将最后一步添加为预览和确认页面之类的内容,您可以使用虚拟表单添加新步骤并使用模板显示适当的数据。要从之前的步骤中获取数据,您可以使用get_context_data 视图方法,使用之前表单的清理数据构建上下文。
【讨论】:
以上是关于Django SessionWizardView 页面重新加载后跳回第一步的主要内容,如果未能解决你的问题,请参考以下文章