2013-10-30 18 views
10

当定义一个FormView派生类:Django的FormView控件没有形式方面

class PrefsView(FormView): 
    template_name = "prefs.html" 
    form_class = MyForm   # What's wrong with this? 
    def get(self,request): 
     context = self.get_context_data() 
     context['pagetitle'] = 'My special Title' 
     context['form'] = MyForm # Why Do I have to write this? 
     return render(self.request,self.template_name,context) 

我预计行并不需要context['form'] = MyForm,因为form_class定义,但是没有它{{ form }}不传递到模板。
我在做什么错了?

回答

11

在上下文中,form应该是实例化的形式,而不是形式类。定义form_class与在上下文数据中包含实例化表单完全分离。

对于你给出的例子,我认为你最好覆盖get_context_data而不是get

def get_context_data(self, **kwargs): 
    context = super(PrefsView, self).get_context_data(**kwargs) 
    context['pagetitle'] = 'My special Title' 
    return context 
+1

是的,这是一个很好的建议,但仍然没有回答qeustion,为什么我需要那条线?在几个例子中,我看到了form_class的使用。 – tonjo

+0

实际上,你说定义'form_class'完全独立于在模板中包含实例化表单。所以也许我没有完全理解这一切,为什么我们应该定义'form_class'的目的? – tonjo

+3

如果你不重写'get',你*不需要这行。如果你这样做,那么你会阻止默认实现包含表单,所以当然你需要自己包含它。 –