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

Boo*_*ap4 2 python django django-views django-generic-views

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

zai*_*zil 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
Run Code Online (Sandbox Code Playgroud)

然后在您的模板中,您可以引用这些变量.

<h1>{{ some_thing }}</h1>

<ul>
{% for item in object_list %}
    <li>{{ item.name }}</li>
{% endfor %}    
</ul>
Run Code Online (Sandbox Code Playgroud)

此方法仅用于为模板提供上下文.

get_queryset()

使用者ListViews- 它确定要显示的对象列表.默认情况下,它只会为您指定的模型提供所有内容.通过重写此方法,您可以扩展或完全替换此逻辑.关于这个主题的Django文档.


bak*_*ble 4

这些是完全不同的事情。

get_context_data()用于生成可在模板中访问的变量的字典。queryset是由模型实例组成的 Django ORM 查询集

get_context_data()in的默认实现将(默认情况下仅返回)ListView的返回值作为变量添加到上下文。get_queryset()self.querysetobjects_list