我编写了一个应用程序,其中一部分是使用URL解析器以ReST类型的方式获取某些数据。因此,如果您将/ foo / bar作为路径,它将找到所有条形项目,如果您输入/ foo,它将返回foo下面的所有项目
所以我的应用程序有一个像
这样的查询data = Paths.all().filter('path =', self.request.path).get()
哪个效果很好。现在我想使用模板
将其发送到UI{%for datum in data%}
</div>
{%endfor%}
当我这样做时,我得到的数据不是可迭代的错误。所以我将Django更新为{% for datum in data.all %}
,现在看起来比我以某种方式提供更多的数据。它显示数据存储区中的所有数据都不理想。所以我从Django中删除了.all并将数据存储区查询更改为
data = Paths.all().filter('path =', self.request.path).fetch(1)
现在按照我的意图行事。在文档中说
db.get()函数获取一个 来自数据存储区的实体用于密钥 (或键列表)。
所以我的问题是为什么我可以在查询返回时使用fetch()
但不能使用get()
进行迭代。我的理解出了什么问题?
答案 0 :(得分:9)
你正在查看错误的get()的文档 - 你想要get() method on the Query object。简而言之,.fetch()始终返回一个列表,而.get()返回第一个结果,如果没有结果则返回None。
答案 1 :(得分:1)
get()要求(我认为)只有一个元素,并返回它,而fetch()返回第一个 n 元素的列表,其中在这种情况下, n 恰好是1。