2013-10-30 16 views
10

Podczas definiowania FormView klasę pochodną:Django FormView nie ma kontekstu formularz

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) 

Spodziewałem linię context['form'] = MyForm nie było potrzebne, ponieważ form_class jest zdefiniowana, ale bez niego {{ form }} nie jest przekazywana do szablonu.
Co robię źle?

Odpowiedz

11

W kontekście, form powinna być instancją, a nie klasą formularza. Definiowanie form_class jest całkowicie niezależne od włączenia instancji do danych kontekstowych.

Podany przykład, myślę, że lepiej zastąpić get_context_data zamiast get.

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

Tak, to dobra rada, ale wciąż nie odpowiada na pytanie, dlaczego potrzebuję tej linii? W kilku przykładach widzę zamiast tego użycie klasy form_klasy. – tonjo

+0

W praktyce mówisz, że definiowanie 'klasy_tekstowej' jest całkowicie oddzielne od włączenia instancji do szablonu. Więc może nie w pełni to rozumiałem, do jakiego celu należy zdefiniować 'form_class'? – tonjo

+3

Nie * potrzebujesz * tej linii, jeśli nie przesłonisz 'get'. Jeśli to zrobisz, uniemożliwisz domyślną implementację z dołączeniem formularza, więc oczywiście musisz to uwzględnić samodzielnie. –

Powiązane problemy