django - Django 模板中的 QuerySet 、 Tuple 、 Dictionary 有什么区别

标签 django django-templates django-views

我无法理解如何在 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/

相关文章:

python - 如何遍历表单字段选择并显示关联的模型实例字段

django - Haystack 搜索结果 : how to use different templates for different models in page. object_list?

python - 如何从一组子实例中获取所有相关/父实例而不循环遍历后一组

python - 如何包含在运行时生成并存储在变量中的模板?

python - 如何使用 Django Rest Framework 中的 SerializerMethodField 以原始形式返回列表外键字段?

python - 从 settings.py 文件中提取密码

python - 使用 pip 安装factory_boy 时遇到问题

javascript - 在CSS中将CSS样式应用于表单项

python - Django send_mail 不适用于 mailgun

python - Django模型复杂查询