2016-03-06 3 views
6

Мы можем сделать это в Django:Джанго вид: get_context_data() против ГЭТ()

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 

или:

class LoginView(generic.FormView): 

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

Какой из них лучше и почему?

ответ

3

get_context_data() интересен, так как он имеет только одну цель (сделать что-то одно и сделать это хорошо): передать данные в шаблон.

С другой стороны, get() имеет множество задач, необходимых для возврата HttpResponse в конце. get() скорее должен быть скелетом вызовов методов, делегируя задачи. Среди них у вас есть get_context_data(), а другие - по классу, который вы наследуете.

До тех пор, пока это возможно, я думаю, что лучше позволить родительским классам обрабатывать методы get(), post(), ... и использовать удобные методы, которые они предоставляют.

Насколько я могу судить, единственным случаем, с которым мне приходилось обращаться с методом get(), является то, что вы пишете общие представления.

1

Ни один из них не является «лучшим». Я бы сказал, что это зависит от сценария, что вам нужно делать. get_context_data() вызывается для всех методов запроса (post, get), поэтому, если вам нужно иметь некоторые данные, доступные каждый раз, используйте get_context_data(). Если вам нужны данные только для определенного метода запроса (например, в get), тогда введите его в get.

Смежные вопросы