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 %}
</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.