3

編集: FWIW、私はdjango1.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}}

等..

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)を確認した後、失敗している可能性があると思われることの1つは、フォームが無効であるということです。ステップ番号をインクリメントしてprocess_step関数を呼び出すには有効である必要があります。ただし、{{step}}変数は正しい値を取得しています。そして、私はフォームでクレイジーなことは何もしていません...

とても奇妙。しかし、私の主な質問は解決されました。

于 2011-11-15T19:44:21.663 に答える