如果我在Django中使用formwizard,我如何访问URL参数并使用它们?

时间:2013-02-08 06:13:33

标签: python django django-formwizard

我正在使用Django 1.4。我在django页面上花了很长时间进行googleing并查看文档,https://docs.djangoproject.com/en/1.4/ref/contrib/formtools/form-wizard/等。很少有人提出这个问题而且没有人碰巧回答过这个问题。

我需要做的是:

使用urls.py中的slug paramater(如下所示):

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

(如下所示):

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

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

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

2 个答案:

答案 0 :(得分:1)

也解决了这个问题。 FormWizard 实例包含 self.args self.kwargs ,它们设置为 args kwargs 传递给来自URLconf的视图。你可以在 django.views.generic.base.dispatch

中看到它

答案 1 :(得分: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

为所有formwizard页面设置上下文var的示例代码(与他们略有不同):

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。如果你仍然坚持这个答案,这是一个很棒的地方。祝大家好运。