什么是Django模板中的QuerySet,Tuple,Dictionary之间的区别

时间:2011-07-07 14:12:46

标签: 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没有模板来处理

2 个答案:

答案 0 :(得分:10)

QuerySet :一个Django类,它处理SQL响应并返回表示结果的python结构。虽然它在很多方面都像列表一样运行,但它实际上就是所谓的“可迭代”。它只是嘲笑列表的行为,允许你在其上使用for-loops之类的东西。

元组:不可变列表。这意味着一旦设定,就无法改变。在几乎所有其他方式中,它的行为就像列表一样。

字典:也称为其他语言的哈希。它可以被认为是“键控列表”。最严格意义上的“列表”是串行存储在存储器中的一组项目。在编程的旧时代,您必须关闭“弹出”项目并将项目“推送”到列表中,并且它们只能以FIFO或先进先出的方式检索。字典提供了一种在列表中“查找”项目的方法。它由键值对组成,因此您可以引用键并获取附加值。

现在就Django模板而言:

QuerySets :您使用标准方法迭代这些。获得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 %}

答案 1 :(得分:4)

您指的是这些文档吗? https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

我认为这就是你要找的东西。

基本上你会像:

一样迭代它们
{% for item in a %}
{{item.field}}
{{item.field2}}
{% endfor %}

{{b.field}}

{% for item in c %}
{{item.name}}
{{item.entry__headline}}
{% endfor %}

{% for item in d %}
{{item}}
{% endfor %}

# Also you can do this if you want to access just a particular index:
{{d.0}}
{{d.1}}

{% for item in e %}
{{item.field}}
{{item.field2}}
{% endfor %}

至于您的数据类型:
a将是QuerySet或模型对象列表
b将是模型对象
c将是一个ValuesQuerySet或一个字典列表 d也是一个ValuesQuerySet,但它实际上是一个元组列表 e将是一个RawQuerySet,其行为类似于普通的QuerySet

来源:
https://docs.djangoproject.com/en/dev/topics/db/sql/#django.db.models.Manager.raw
https://docs.djangoproject.com/en/dev/ref/models/querysets/#values
https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list