Python 使用Django向导的动态步骤数

Python 使用Django向导的动态步骤数,python,django,wizard,django-formwizard,Python,Django,Wizard,Django Formwizard,向导的步骤可能是动态的吗?例如,第二步重复出现n次?您想做什么 如果您想创建一个向导,其中步骤x重复n次,那么答案是肯定的,您可以这样做,而且并不难 您只需要创建一个向导类工厂,在给定特定参数的情况下创建类,就完成了 如果你是说,我可以在运行中更改向导的步骤吗。 答案仍然是肯定的,但事情会变得更复杂一些,因为在向导初始化之后,您必须更改其内部状态 这一点都不好玩,如果你真的需要我建议的第二个选项,请尝试寻找替代设计,并选择动态向导方法作为最后手段。我也遇到了同样的问题,表单向导(即使在Djang

向导的步骤可能是动态的吗?例如,第二步重复出现n次?

您想做什么

如果您想创建一个向导,其中步骤x重复n次,那么答案是肯定的,您可以这样做,而且并不难

您只需要创建一个向导类工厂,在给定特定参数的情况下创建类,就完成了

如果你是说,我可以在运行中更改向导的步骤吗。 答案仍然是肯定的,但事情会变得更复杂一些,因为在向导初始化之后,您必须更改其内部状态


这一点都不好玩,如果你真的需要我建议的第二个选项,请尝试寻找替代设计,并选择动态向导方法作为最后手段。

我也遇到了同样的问题,表单向导(即使在Django 1.4中)对我来说也不起作用。这是如此多的定制,以至于有些事情开始出错,调试非常糟糕

我确实根据现有的分类编写了一些代码。请查看我的GIST,我在那里发布了一个对我非常有用的解决方案。如果你有任何意见或建议(包括班级名称),请发表

  • 多页表单管理器,以(数学)图的形式排列,具有动态路径(下一个表单取决于实际状态和用户输入)和表单数量。处理存储和验证。基于Django-1.4的
    Django.contrib.formtools.wizard.views.SessionWizardView

  • 自定义Django会话存储。删除了所有处理文件的功能。基于Django-1.4的
    Django.contrib.formtools.wizard.storage.base.BaseStorage
    Django.contrib.formtools.wizard.storage.session.SessionStorage


我也在努力解决这个问题。Tommaso Barbugli关于为类创建工厂的想法是正确的。 我目前正在使用Django 1.6

在url中,包括以下内容:

url('/create_wizard/', factory_wizard, name='factory_wizard')
这是工厂:

class WizardClass(SessionWizardView):
    ...

def factory_wizard(request, *args, **kwargs):
    parameter_to_know_which_step_number = #  I let you implement this one ( I did it by the session data )
    ret_form_list = [FirstFormClass, SecondFormClass]

    for _ in range(parameter_to_know...):
        form_list.append(SecondFormClass)

    class ReturnClass(WizardClass):
        form_list = ret_form_list

    return ReturnClass.as_view()(request, *args, **kwargs)

您能提供向导类工厂的代码吗?这个工厂的参数是什么?