admin管理员组

文章数量:1316645

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 7686 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 (=).

本文标签: djangoDoes calling a method from template query the database each timeStack Overflow