Does calling a method from template query the database each time?
Say you have the following method in a model:
def get_images(self):
return ReleaseImage.objects.filter(release=self.id)
And you call it from a template like so:
{% if release.get_images %}{{ MEDIA_URL }}{{ release.get_images.first }}{% endif %}
Does the database get queried twice, or is there some behind-the-scenes optimization that prevents this? It might be highly inefficient if not.
It queries twice here, yes. But we can optimize it with a {% with … %}
template tag [Django-doc]:
{% with images=release.get_images %}
{% if images %}{{ MEDIA_URL }}{{ images.0 }}{% endif %}
{% endwith %}