0

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

我需要做的是:

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

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):
        ...
4

2 回答 2

1

也解决了这个问题。FormWizard实例包含self.argsself.kwargs,它们设置为从 URLconf 传递给视图的argskwargs 。您可以在django.views.generic.base.dispatch中看到它

于 2013-02-08T08:38:58.667 回答
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

为所有表单向导页面设置上下文变量的示例代码(与他们的略有不同):

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。如果您在得到这个答案后仍然被卡住,那么这是一个很棒的去处。我祝大家好运。

于 2013-02-10T04:47:03.797 回答