如何在模板上显示django表单向导extra_context?

时间:2011-11-15 02:18:21

标签: python django forms django-formwizard

编辑: 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}}

等。

2 个答案:

答案 0 :(得分:5)

查看docs我会说get_context_data就是你所追求的:

  

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

答案 1 :(得分: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}}变量获得了正确的值。我并没有对表格做任何疯狂的事情......

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