将表单类型传递给视图

时间:2017-09-18 08:11:55

标签: python django forms

我想创建一个获取表单类型(来自forms.py)并将其呈现为html的通用视图。 我需要不同的网址将通过不同的形式。假设我在forms.py中有form1和form2类,我需要将表单传递给 urlpatterns ,如下所示:

urlpatterns = [
    url(r'^form_test1/$', views.generic_form, name='form_test', form_type = forms.form1()),
    url(r'^form_test2/$', views.generic_form, name='form_test2', form_type = forms.form2()),
]

可以制作吗?如果没有,我怎样才能达到所需的泛型。

谢谢!

1 个答案:

答案 0 :(得分:2)

实际上你可以使用url()的第三个位置参数作为传递给视图的额外参数的字典:

url(r'^form_test1/$', views.generic_form, {'form_type': forms.form1}, name='form_test'),

请注意,您应该将类​​而不是实例传递给视图;并记住视图需要接受form_type作为参数。

但是我真的会说这是错误的做法。这样的事情属于视图本身。相反,捕获一个参数并在视图中执行逻辑:

url(r'^form_test(?P<form_id>\d+)/$', views.generic_form, name='form_test'),

...

FORMS = [ forms.form1, forms.form2 ]

def generic_form(request, form_id):
    FormClass = FORMS[form_id]

或使用字典,无论命名方案有意义。