这是如何检查对象在模板中是否没有相关对象的?

时间:2012-12-24 05:25:50

标签: python django

这是我目前要检查作者是否在相关照片模型中有一些照片:

{% if author.photo_set.count > 0 %}
<h2>...</h2>
<div style="clear: both;"></div>
<div class="author_pic">
    {% for photo in author.photo_set.all %}
        <img src="..." />
    {% endfor %}
    <div style="clear: both;"></div>
</div>
<div style="clear: both;"></div>
{% endif %}

这是正确的方式,还是我可以避免以某种方式提出两个问题?

感谢。

2 个答案:

答案 0 :(得分:4)

您可以使用with标记来避免多次查询。

{% with author.photo_set.all as photos %}
    {% if photos %}
    <h2>...</h2>
    <div style="clear: both;"></div>
    <div class="author_pic">
        {% for photo in photos %}
            <img src="..." />
        {% endfor %}
        <div style="clear: both;"></div>
    </div>
    <div style="clear: both;"></div>
    {% endif %}
{% endwith %}

您还可以在for循环中使用empty标记,但这可能不适用于您的示例。

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#for-empty

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% empty %}
    <li>Sorry, no athlete in this list!</li>
{% endfor %}
<ul>

答案 1 :(得分:1)

AS @pyrospade建议,您可以查看照片对象是否存在。或者你也可以检查photo_set列表的长度(查看length模板标签),如下所示:

{% if author.photo_set.all|length > 0 %}
    <h2>...</h2>
    <div style="clear: both;"></div>
    <div class="author_pic">
        {% for photo in author.photo_set.all %}
            <img src="..." />
        {% endfor %}
        <div style="clear: both;"></div>
    </div>
    <div style="clear: both;"></div>
{% endif %}