2016-03-06 18 views
6

Chúng ta có thể làm điều này trong Django:Django xem: 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 

hay:

class LoginView(generic.FormView): 

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

Cái nào là tốt hơn và tại sao?

Trả lời

3

Sử dụng get_context_data() thật thú vị vì nó chỉ có một mục tiêu (làm một việc và làm tốt): chuyển dữ liệu vào mẫu.

Mặt khác, get() có nhiều tác vụ cần thực hiện để trả lại HttpResponse cuối cùng. get() đúng hơn là bộ khung của các cuộc gọi phương thức, nhiệm vụ ủy nhiệm. Trong số đó, bạn có get_context_data() và các loại khác theo lớp bạn đang kế thừa.

Miễn là có thể, tôi nghĩ tốt hơn là để lớp cha mẹ xử lý các phương pháp get(), post(), ... và sử dụng các phương pháp tiện lợi mà chúng cung cấp.

Theo như tôi quan tâm, trường hợp duy nhất mà tôi phải tự xử lý phương pháp get() là khi viết chế độ xem chung.

1

Không ai trong số họ "tốt hơn". Tôi muốn nói nó phụ thuộc vào kịch bản những gì bạn cần làm. get_context_data() được gọi cho tất cả các phương thức yêu cầu (post, get), vì vậy nếu bạn cần phải có sẵn một số dữ liệu mỗi lần, hãy sử dụng get_context_data(). Nếu bạn chỉ cần dữ liệu cho một phương thức yêu cầu cụ thể (ví dụ: trong get), thì hãy đặt nó trong get.