2016-03-06 9 views
6

Possiamo farlo in Django:Django vista: get_context_data (vs) get()

class LoginView(generic.FormView): 

    def get_context_data(self, **kwargs): 
     common = CommonView(self, **kwargs) 
     context = super(LoginView, self).get_context_data(**kwargs) 
     context['common'] = common.infos 

o:

class LoginView(generic.FormView): 

    def get(self, request, *args, **kwargs): 
     common = CommonView(self, **kwargs) 
     return render(request, self.template_name, {'common': common.infos }) 

Qual è la migliore e perché?

risposta

3

L'utilizzo di get_context_data() è interessante poiché ha un solo obiettivo (fare una cosa e farlo bene): passare i dati al modello.

D'altra parte, get() ha molte attività da svolgere per restituire un HttpResponse alla fine. get() dovrebbe essere piuttosto uno scheletro di chiamate di metodo, delegando compiti. Tra questi, hai get_context_data() e altri in base alla classe che stai ereditando.

Finché è possibile, penso che sia meglio lasciare che la classe genitore (i) gestisca i metodi get(), post(), ... e utilizzi i metodi di convenienza che forniscono.

Per quanto mi riguarda, l'unico caso per il quale ho dovuto gestire il metodo get() è quando si scrivono viste generiche.

1

Nessuno di questi è "migliore". Direi che dipende dallo scenario ciò che devi fare. get_context_data() viene chiamato per tutti i metodi di richiesta (post, get), quindi se è necessario disporre di alcuni dati disponibili ogni volta, utilizzare get_context_data(). Se hai bisogno dei dati solo per un metodo di richiesta specifico (ad esempio in get), inseriscilo in get.