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