作者:白羊座的张康安_3z2_381 | 来源:互联网 | 2023-09-23 06:16
他们确实做了不同的事情。
get()
这是一个最高级的方法,而且也为每个HTTP动词- ,,get()
等你会当你想之前请求由视图或后处理做点什么覆盖它。但这仅在第一次加载表单视图时才调用,而不是在提交表单时调用。文档中的基本示例。默认情况下,它将仅呈现配置的模板并返回HTML。post()patch()
class MyView(TemplateView):
# ... other methods
def get(self, *args, **kwargs):
print('Processing GET request')
resp = super().get(*args, **kwargs)
print('Finished processing GET request')
return resp
get_queryset()
由ListViews
使用-它确定要显示的对象列表。默认情况下,它只会为你指定的模型提供全部功能。通过覆盖此方法,你可以扩展或完全替换此逻辑。有关该主题的Django文档。
class FilteredAuthorView(ListView):
template_name = 'authors.html'
model = Author
def get_queryset(self):
# original qs
qs = super().get_queryset()
# filter by a variable captured from url, for example
return qs.filter(name__startswith=self.kwargs['name'])
get_context_data()
此方法用于填充字典以用作模板上下文。例如,ListViews将get_queryset()像author_list上面的示例一样填充的结果。你可能最经常重写此方法,以添加要显示在模板中的内容。
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data['page_title'] = 'Authors'
return data
然后,在模板中,你可以引用这些变量。
{{ page_title }}
{% for author in author_list %}
- {{ author.name }}
{% endfor %}
现在回答你的主要问题,你之所以拥有如此众多的方法,是为了让你轻松地精确定位你的自定义逻辑。它不仅使你的代码更具可读性和模块化,而且更具可测试性。