django - Does calling a method from template query the database each time? - Stack Overflow

admin2025-04-17  2

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.

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.

Share Improve this question asked Jan 31 at 21:06 burbur 8178 silver badges22 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

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

As with (most) Django template tags, you can not add spaces around the equal sign (=).

转载请注明原文地址:http://anycun.com/QandA/1744846543a88441.html