2016-03-06 53 views
6

Możemy to zrobić w Django:Django Widok: 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 

czyli

class LoginView(generic.FormView): 

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

Który z nich jest lepszy i dlaczego?

Odpowiedz

3

Korzystanie z get_context_data() jest interesujące, ponieważ ma tylko jeden cel (zrobić jedno i zrobić to dobrze): przekazać dane do szablonu.

Z drugiej strony, get() ma wiele zadań do wykonania, aby w końcu zwrócić HttpResponse. get() powinien raczej stanowić szkielet wywołań metod, delegujących zadania. Wśród nich masz get_context_data(), a inne według klasy, którą dziedziczysz.

Tak długo jak to jest możliwe, myślę, że lepiej jest pozwolić klasy nadrzędnej (es) obsługiwać get(), post(), ... metody i użyć metod wygody, które świadczą.

Jeśli chodzi o mnie, jedynym przypadkiem, w którym sam musiałem obsłużyć metodę get(), jest pisanie ogólnych widoków.

1

Żadne z nich nie jest "lepsze". Powiedziałbym, że to zależy od scenariusza, co musisz zrobić. get_context_data() jest wywoływana dla wszystkich metod żądań (post, get), więc jeśli potrzebujesz mieć jakieś dane dostępne za każdym razem, użyj get_context_data(). Jeśli potrzebujesz danych tylko dla określonej metody żądania (np. W get), umieść ją w get.