2013-02-08 26 views
0

我正在使用Django 1.4。我花了很長一段時間的谷歌,並在django頁面上看文檔,https://docs.djangoproject.com/en/1.4/ref/contrib/formtools/form-wizard/等。很少有人問過這個問題,沒有人碰巧已經回答了這個問題。如何在Django中使用formwizard訪問URL參數並使用它們?

我需要做的是:在views.py

FORMS=[...] 
url(r'^url/(?P<slug>[\w-]+)/form/$', WizardWizard.as_view(FORMS)), 

(如下):

使用slug paramater從urls.py(如下)

class WizardWizard(SessionWizardView): 
    template_name = "template.html" 

    extra_context = Model.objects.filter(slug=slug) # HERE! 

    def done(self, form_list, **kwargs): 
     ... 
+0

我發現這個:http://stackoverflow.com/questions/1947040/django-formwizard-and-view。但它不適用於我:( –

回答

1

被卡住了幾天後,答案很簡單。如果您正在閱讀本文,請確保您首先使用基於類的通用視圖,或者這是一個不同的問題。

您可以找到以下鏈接的相關信息,目前還不清楚這是怎麼分配額外的上下文(不與extra_context中用VAR): https://docs.djangoproject.com/en/1.4/ref/contrib/formtools/form-wizard/#django.contrib.formtools.wizard.views.WizardView.get_context_data

示例代碼(從他們的略有不同),設置一個各位背景VAR formwizard網頁:

def get_context_data(self, form, **kwargs): 
    context = super(PaperworkWizard, self).get_context_data(form=form, **kwargs) 

    #this line makes camp available as a var in the template context. 
    #it sets it to an OBJECT RETRIEVED USING THE SLUG FROM THE URL. 
    context.update({'camp': Camp.objects.get(slug=self.kwargs.get("slug"))}) 
    return context 

你需要把這個代碼在你所做的SessionWizardView(或CookieWizardView)的子類。在問題的上下文中,位於views.py文件中的WizardWizard類。

以任何其他方式執行此操作的問題是self.args和self.kwargs是在調度函數運行時設置的。注意:您不能通過設置extra_context變量來設置上下文這是我掉下來的地方。

從freenode的#django頻道獲得nkryptic的讚譽。如果你在這個答案後仍然陷入困境,那麼這是一個很棒的地方。祝大家好運。

1

也解決了這個問題。 FormWizard實例包含self.argsself.kwargs被設置爲ARGS並傳遞從URL配置以查看kwargs。你可以在看到它django.views.generic.base.dispatch

+0

我_was_試圖覆蓋調度方法,但它不是在django 1.4中正確的方式(因爲我發現了困難的方法,請參閱我的答案中的鏈接): ) –

+0

是的,我看到了鏈接。我不需要派遣,因爲我需要在一些地方使用一個變種。 **派遣**使用**參數**和** kwargs **。 一切OK :) –

相關問題