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 %}
Вернуться на верх