Django通用视图中get_context_data和queryset之间的差异?

时间:2017-06-29 10:51:26

标签: python django django-views django-generic-views

Django通用视图中get_context_dataqueryset之间有什么区别?他们似乎做同样的事情?

3 个答案:

答案 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是由模型实例

组成的Django ORM查询集

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(),其中可以将额外的变量传递给模板。