2016-03-21 37 views
0
@method_decorator(login_required, name='dispatch') 
class BaseView(TemplateView): 
    template_name = '...html' 

    def dispatch(self, request, *args, **kwargs): 
     # ... 

     return super(BaseView, self).dispatch(request, *args, **kwargs) 


class ConfigureView(BaseView): 
    form_class = Form 
    template_name = 'configure.html' 

    def get(self, request, *args, **kwargs): 
     form = self.form_class(user=request.user) 

     return render(request, self.template_name, { 
      'form': form 
     }) 

    def post(self, request, *args, **kwargs): 
     form = self.form_class(request.POST, user=request.user) 

     if form.is_valid(): 
      form.save() 

      return redirect('...') 

     return render(request, self.template_name, {'form': form}) 

    def get_context_data(self, **kwargs): 
     print('**********') # Never printed 

     context = super(ConfigureView, self).get_context_data(**kwargs) 

     context['app'] = App.objects.get(slug=kwargs['slug']) 

     return context 

Warum? Ich glaube, ich folge den Unterlagen.get_context_data wird nicht aufgerufen

+0

Ist dies Ihr tatsächlicher Code? Es gibt keinen Fehler hier, also sollten Sie ein bisschen mehr Ihres tatsächlichen Codes zeigen, um Ihnen zu helfen. – Gocht

+0

@Gocht ist eine Mindestversion. Und ich bekomme keinen Fehler. –

+1

Dies ist ein extremes "Minimum". Erwäge, mehr Code zu teilen. – Gocht

Antwort

3

Sie kehren ein render in Ihrem .get() Methode zu den Druckbefehl erhalten sollte, Diese Methode (render) empfängt einen Kontext als Parameter, er ruft nicht .get_context_data() auf, Sie müssen dies tun:

... 
get(self, request, *args, **kwargs): 
    # ... 
    return super(ConfigureView, self).get(request, *args, **kwargs) 
+0

Vielen Dank. –

+0

@AdamSilver Jetzt können Sie sehen, warum mehr Code benötigt wurde, bitte denken Sie daran, wenn Sie das nächste Mal eine Frage stellen. – Gocht

+0

tue ich :) Also jetzt muss ich die 'Form' in der Kontextmethode übergeben? –

-1

Sie können die Klasse instanziiert, und rufen Sie die Methode

ConfigureView().get_context_data() 

oder

instance = ConfigureView() 
instance.get_context_data() 

die