2013-03-25 5 views
5
from forms import MyContactForm 
from django.views.generic.edit import FormView 

class MyFormView(FormView): 
    template_name = 'my_forms.html'          
    form_class = MyContactForm 
    success_url = '/thanks/' 

W moim szablonu, forma nazywa się tak:Jak określić nazwę zmiennej formularza używanej w szablonie FormView? (Object_context_name formularzy)

{{ form }}

Ale jak mogę nazwać tak:

{{ my_contact_form }}?

To będzie odpowiednik formularzy object_context_name (dla modeli).

+0

http://stackoverflow.com/questions/6907388/updating-context-data-in-formview-form-valid-method – catherine

Odpowiedz

8

Można zastąpić get_context_data:

class MyFormView(FormView): 
    template_name = 'my_forms.html'          
    form_class = MyContactForm 
    success_url = '/thanks/' 

    # from ContextMixin via FormMixin  
    def get_context_data(self, **kwargs): 
     data = super(MyFormView, self).get_context_data(**kwargs) 

     data['my_contact_form'] = data.get('form') 

     return data 
+0

Czy masz jakiś pomysł co do zrobić, gdy chcesz korzystać z wielu formularzy? Po prostu pomyślałem, że przekazanie każdego z nich do klucza danych i po prostu upuszczenie 'form_class'. Ale otrzymuję "TypeError, NoneType nie można wywołać", kiedy to robię. – Bentley4

+1

Możesz przesłać tylko jeden formularz. 'generic.edit.FormView' zarządza jednym formularzem. Spójrz na [źródło FormMixin i ProcessFormView] (https://github.com/django/django/blob/master/django/views/generic/edit.py): będziesz musiał zastąpić 'get' i' form_invalid 'wyrenderować wszystkie formularze i będziesz musiał przesłonić' post', aby określić, który formularz został przesłany i przetworzyć go. W tym momencie nie sądzę, że powinieneś dziedziczyć po 'FormView'. –

+1

Sprawdź http://stackoverflow.com/questions/6276398/multiple-form-classes-in-django-generic-class-views, a zwłaszcza drugą aktualizację zaakceptowanej odpowiedzi. –

Powiązane problemy