2011-11-15 71 views
3

編輯: FWIW,我運行的Django 1.3如何讓django表單嚮導extra_context在模板上顯示?

我有...

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

所以我最終使用的模板是:

{{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()'總是== 0這使得我'如果步驟== 1:'邏輯失敗...

在審查源代碼(django.contrib.formtools.wizard.FormWizard)後,看起來可能會失敗的是我的f orm無效。它必須對步號有效,才能遞增並調用process_step函數。但是,{{step}}變量正在獲取正確的值。而我並沒有對錶格做任何事情......

太奇怪了。但我的主要問題解決了。

+1

請將您的回覆標記爲「接受的答案」。 –

+0

@teewuane我知道這是現在超級老,但問題是,這一步是一個字符串。至少現在使用的是1.9版本中從Django開始的'formtools.wizard'。 – thefoxrocks

+0

@thefoxrocks,哈,我試着想起我甚至在這裏工作。但知道'step'是一個字符串,而不是一個整數會根據我的回答是有區別的:)但是python不會試圖將'step'強制轉換爲int並比較這些數字嗎?或者我只是想JavaScript?哈哈。 – teewuane

5

望着docs我會說,get_context_data是你所追求的:

返回一個步驟的模板上下文。您可以覆蓋此方法 以爲所有步驟或某些步驟添加更多數據。此方法返回包含已渲染表單步驟的 字典。

+0

當。看起來這是爲開發版本,我正在運行1.3。他們添加的所有內容看起來都不錯! – teewuane

+2

大約五年後,我谷歌這個問題(再次),並發現我的問題堆棧溢出。這次你的回答是我的解決方案。哈! – teewuane

相關問題