nas*_*yn8 0 python django django-class-based-views
我一直在学习 Django,我的困惑来源之一是基于类的视图以及何时重写 get 方法。我查看了文档,它解释了 get 的作用,但没有解释何时应该覆盖 get。
我最初是这样创建视图的:
class ExampleView(generic.ListView):
template_name = 'ppm/ppm.html'
paginate_by = 5
def get(self, request):
profiles_set = EmployeeProfile.objects.all()
context = {
'profiles_set': profiles_set,
'title': 'Employee Profiles'
}
return render(request, self.template_name, context)
Run Code Online (Sandbox Code Playgroud)
但最近有人告诉我,我的代码对于默认实现来说足够简单,而我所需要的就是这样:
class ExampleView(generic.ListView):
model = EmployeeProfile
template_name = 'ppm/ppm.html'
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:在什么场景/情况下我应该重写 get 方法?
如果您使用内置的通用视图,那么您很少需要重写get(). 您最终要么重复大量功能,要么破坏视图的功能。
例如,该paginate_by选项在您的视图中将不再起作用,因为您没有在get()方法中对查询集进行切片。
如果您使用的是基于通用类的视图,例如ListView,您应该尝试尽可能覆盖特定的属性或方法,而不是覆盖get()。
覆盖视图的优点get()是它的作用非常清楚。您可以看到该视图获取查询集,将其包含在上下文中,然后呈现模板。您无需了解即可ListView理解该视图。
get()如果您喜欢重写子类的明确性View。您没有使用 的任何功能ListView,因此对其进行子类化没有意义。
from django.views.generic import View
class ExampleView(View):
template_name = 'ppm/ppm.html'
def get(self, request):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3883 次 |
| 最近记录: |