I have written an app and part of it is uses a URL parser to get certain data in a ReST type manner. So if you put /foo/bar as the path it will find all the bar items and if you put /foo it will return all items below foo
So my app has a query like
data = Paths.all().filter('path =', self.request.path).get()
Which works brilliantly. Now I want to send this to the UI using templates
{% for datum in data %}
{{ datum.title }}
{{ datum.content }}
</div>
{% endfor %}
When I do this I get data is not iterable error. So I updated the Django to {% for datum in data.all %} which now appears to pull more data than I was giving it somehow. It shows all data in the datastore which is not ideal. So I removed the .all from the Django and changed the datastore query to
data = Paths.all().filter('path =', self.request.path).fetch(1)
which now works as I intended. In the documentation it says
The db.get() function fetches an
entity from the datastore for a Key
(or list of Keys).
So my question is why can I iterate over a query when it returns with fetch() but can’t with get(). Where has my understanding gone wrong?
You’re looking at the docs for the wrong
get()– you want the get() method on the Query object. In a nutshell,.fetch()always returns a list, while.get()returns the first result, or None if there are no results.