【问题标题】:Diference between get_context_data and queryset in Django generic views?Django通用视图中get_context_data和queryset之间的区别?
【发布时间】:2017-12-03 00:53:01
【问题描述】:

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

【问题讨论】:

  • 他们是如何做同样的事情的,get_context_data() 返回一个上下文字典。 queryset 是一个 Django QuerySet 实例。
  • 他们实现了同样的目标
  • 他们不...the get_context_data docs 的第一行说了什么?...您对他们所做的事情的解释是什么让您认为他们是相同的?
  • 你了解字典和查询集的区别吗??
  • 他们所做的不是他们是什么,但这就是我要求专家阐明的原因。

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


【解决方案1】:

这些是完全不同的东西。

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-11
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多