Django通用视图中get_context_data和queryset之间的区别?
Posted
技术标签:
【中文标题】Django通用视图中get_context_data和queryset之间的区别?【英文标题】:Diference between get_context_data and queryset in Django generic views? 【发布时间】:2017-12-03 00:53:01 【问题描述】:Django 通用视图中的get_context_data
和queryset
有什么区别?他们似乎做同样的事情?
【问题讨论】:
他们是如何做同样的事情的,get_context_data()
返回一个上下文字典。 queryset
是一个 Django QuerySet 实例。
他们实现了同样的目标
他们不...the get_context_data
docs 的第一行说了什么?...您对他们所做的事情的解释是什么让您认为他们是相同的?
你了解字典和查询集的区别吗??
他们所做的不是他们是什么,但这就是我要求专家阐明的原因。
【参考方案1】:
这些是完全不同的东西。
get_context_data()
用于生成可在模板中访问的变量的字典。 queryset
是由模型实例组成的 Django ORM 查询集
ListView
中get_context_data()
的默认实现将get_queryset()
的返回值(默认情况下仅返回self.queryset
)作为objects_list
变量添加到上下文中。
【讨论】:
【参考方案2】: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.
【讨论】:
【参考方案3】:为什么不看看代码。
http://ccbv.co.uk/projects/Django/1.11/django.views.generic.list/ListView/
单击 get() 方法表明它调用 get_queryset() 方法来获取查询集 - 通常在 ListView 中迭代。
进一步调用 get context_data() 可以将额外的变量传递给模板。
【讨论】:
以上是关于Django通用视图中get_context_data和queryset之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章
如果使用通用视图,是不是需要在 django 模板表单中填写动作属性