我无法理解如何在 Django 中迭代 QuerySet 、 Tuple 和 Dictionarty 。
我很困惑哪些 djnago 函数返回的是 objects.all 或 objects.get
假设我有
a = model.objects.all()
b = model.object.get(pk=1)
c = Blog.objects.values('name', 'entry__headline')
d = Entry.objects.values_list('id', 'headline')
e = Person.objects.raw('SELECT * FROM myapp_person')
每个场景中返回的是什么,最大的问题是我如何迭代。
所有这些都让我很困惑。我研究了文档,但它们只讲一件事,不讲如何在模板中使用。我知道它与 python 相关,但是 python 没有模板来处理
最佳答案
查询集 :处理 SQL 响应并返回表示结果的 python 构造的 Django 类。尽管它在很多方面都像一个列表,但它实际上是所谓的“可迭代”。它只是模拟列表的行为,以允许您在其上使用诸如 for 循环之类的东西。
元组 : 一个不可变的列表。这意味着一旦设置,就无法更改。在几乎所有其他方式中,它的行为就像一个列表。
字典 : 在其他语言中也称为散列。它可以被认为是一个“键控列表”。严格意义上的“列表”是一组连续存储在内存中的项目。在过去的编程时代,您必须“弹出”项目并将项目“推”到列表中,并且只能以 FIFO 或先进先出的方式检索它们。字典提供了一种在列表中“查找”项目的方法。它由键值对组成,因此您可以引用一个键并获取附加值。
现在就 Django 模板而言:
查询集 :您使用标准方法迭代这些。一旦你得到类似 MyModel.objects.all()
的结果,您可以使用 {% for value in queryset %}
标签。
元组 :就迭代而言,这些行为与标准列表完全相同。您也可以简单地使用 {% for value in tuple %}
标签。唯一可能出现的问题是,有时您最终会得到元组的元组或元组列表。这些就像多级列表。您必须遍历外部列表或元组,然后遍历内部列表或元组。
字典 :这些可能是最复杂的,只是因为它们需要调用方法来获取可迭代对象。
mydict.iteritems() # returns an iterable consisting of `(key, value)` tuples.
mydict.iterkeys() # returns an iterable consisting of the keys. You can then use mydict[key] to get the values
mydict.itervalues() # returns an iterable consisting of the values.
最后一种方法可能是 Django 模板中最好的简单迭代:
{% for value in mydict.itervalues %}
关于django - Django 模板中的 QuerySet 、 Tuple 、 Dictionary 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6611986/