3

编辑: FWIW,我正在运行 django 1.3

我有...

class CreateProductWizard(FormWizard):
    def get_template(self, step):
        if step == 1:
            return 'product/form_wizard/editor.html'
        else:
            return 'product/form_wizard/wizard_%s.html' % step
    def process_step(self, request, form, step):
        if step == 1:
            self.extra_context = {'ptype': form.cleaned_data}
            return
        else:
            return
    def done(self, request, form_list):
        # now that it's all together, store it.
        return render_to_response('product/form_wizard/done.html',
            {'form_data': [form.cleaned_data for form in form_list]},
            context_instance=RequestContext(request))

我想将 self.extra_context 放到模板中。

我如何在模板上获得它?

我在模板上试过:

{{extra_context}}
{{form.extra_context}}
{{form.extra_context.ptype}}

ETC..

4

2 回答 2

5

查看文档我会说这get_context_data就是您所追求的:

返回步骤的模板上下文。您可以覆盖此方法为所有或某些步骤添加更多数据。此方法返回包含呈现的表单步骤的字典。

于 2011-11-15T08:59:29.673 回答
2

所以我最终在模板上使用的是:

{{ptype}}

我已经尝试过了。

问题,我仍然不确定为什么我有:

def process_step(self, request, form, step):
        if step == 1:
            self.extra_context = {'ptype': form.cleaned_data}
            return
        else:
            return

有效的是:

def process_step(self, request, form, step):
        self.extra_context = {'ptype': 'hello!!',}

出于某种原因,传递给 'process_step()' 的 'step' 总是 == 0 这使得我的 'if step ==1:' 逻辑失败......

在查看了源代码(django.contrib.formtools.wizard.FormWizard)之后,看起来它可能失败的一件事是我的表单无效。步骤编号必须有效才能递增并调用 process_step 函数。但是,{{step}} 变量正在获得正确的值。而且我并没有对表格做任何疯狂的事情......

太奇怪了。但是我的主要问题已经解决了。

于 2011-11-15T19:44:21.663 回答