重构Django模板forloop

时间:2009-10-29 06:03:24

标签: refactoring django-templates for-loop

我觉得必须有一种更清洁的方式来做这样的事情。我有15个左右的对象列出了连续三个。有人知道更好的解决方案。

<ul>
    {% for object in object_list %}

        <li
            {% ifequal forloop.counter 1  %}class="first"{% endifequal %}
            {% ifequal forloop.counter 4  %}class="first"{% endifequal %}
            {% ifequal forloop.counter 7  %}class="first"{% endifequal %}
            {% ifequal forloop.counter 10  %}class="first"{% endifequal %}
            {% ifequal forloop.counter 13  %}class="first"{% endifequal %}   
        >
            {{ object.title }}
        </li>

        {% ifequal forloop.counter 3 %}<div class="clear"></div>{% endifequal %}
        {% ifequal forloop.counter 6 %}<div class="clear"></div>{% endifequal %}
        {% ifequal forloop.counter 9 %}<div class="clear"></div>{% endifequal %}
        {% ifequal forloop.counter 12 %}<div class="clear"></div>{% endifequal %}
        {% ifequal forloop.counter 15 %}<div class="clear"></div>{% endifequal %}
    {% endfor %}
</ul>

对于第二个循环,您可以

{% if forloop.counter|divisibleby:"3" %}<div class="clear"></div>{% endif %}

但1,4,7,10,13没有共同点。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您正在寻找forloop.counter0。

{% if forloop.counter0|divisibleby:"3" %}<div class="clear"></div>{% endif %}

答案 1 :(得分:0)

您可以使用切片将它们分成3行组,然后对每个3个单位切片执行相应的操作。

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#slice