Django通用视图中get_context_data
和queryset
之间有什么区别?他们似乎做同样的事情?
答案 0 :(得分:5)
<强> get_context_data()强>
此方法用于填充字典以用作模板上下文。例如,ListViews将get_queryset()的结果填充为object_list。您可能最常重复使用此方法来添加要在模板中显示的内容。
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data['some_thing'] = 'some_other_thing'
return data
然后在您的模板中,您可以引用这些变量。
<h1>{{ some_thing }}</h1>
<ul>
{% for item in object_list %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
此方法仅用于为模板提供上下文。
<强> get_queryset()强>
由ListViews
使用 - 它确定您要显示的对象列表。默认情况下,它只会为您指定的模型提供所有内容。通过重写此方法,您可以扩展或完全替换此逻辑。 Django documentation on the subject
答案 1 :(得分:3)
这些是完全不同的东西。
get_context_data()
用于生成可在模板中访问的变量的dict。 queryset
是由模型实例
get_context_data()
中ListView
的默认实现会将get_queryset()
(默认情况下只返回self.queryset
)的返回值添加到上下文objects_list
变量。
答案 2 :(得分:1)
为什么不看一下代码。
http://ccbv.co.uk/projects/Django/1.11/django.views.generic.list/ListView/
单击get()方法显示它调用get_queryset()方法来获取查询集 - 通常在ListView中迭代。
进一步向下调用get context_data(),其中可以将额外的变量传递给模板。