有没有办法在django中使用url动态地将视图类添加到视图中?

时间:2017-09-18 20:30:01

标签: python django django-forms

我想在我的视图中动态传递form_class,以便单个视图可以完成所有工作。此外,我不想使用if条件,因为这不符合目的。

urls.py:

url(r'^(?P<form>[\w-]+)/$',BillCycleCreateView.as_view(),name='BillCycle'),

的观点:

class BillCycleCreateView(CreateView):
    template_name = 'form-view.html'
    success_url = '.'
    def get_form_class(self):
        print(self.kwargs)
        x = self.kwargs['form'] 
        print(x)
        return x

以下代码引发str object is not callable错误。有没有办法解决它或任何其他方式来达到预期的结果?我该怎么回课?

提前致谢!!

2 个答案:

答案 0 :(得分:0)

您需要一个if语句将您从URL(示例中的变量x)获得的字符串转换为实际的表单类。

答案 1 :(得分:0)

您可以这样做:

def get_form_class(self):
    if self.kwargs['form'] == 'form_1':
        return MyForm_1
    elif self.kwargs['form'] == 'form_2':
        return MyForm_2
    else:
        raise Exception('We have an unknown parameter in the url')

建议使用更好的异常消息。