防止循环计数前两次迭代

时间:2014-08-18 12:46:47

标签: django django-templates

我试图以特殊方式显示forloop的前两个对象。其余的应分为三个。

像这样:

<div class="row">
    Object 1

    Object 2 - Object slug
</div><!--/end first row with 2 objects-->


<div class="row">
    Object 3

    Object 4

    Object 5
</div><!--/end row with 3 objects-->

<div class="row">
    Object 6

    Object 7

    Object 8
</div><!--/end row with 3 objects-->

这是我的模板代码:

{% for object in object_list %}

    {% if forloop.first %}
        <div class="row">

            {{object.name}}

    {% elif forloop.counter == 2 %}

            {{object.name}} - {{object.slug}}

        </div><!--/end first row with 2 objects-->

    {% else %}

    {% cycle '<div class="row">' '' '' %}

            {{object.name}} - {{object.slug}}


    {% cycle '' '' '</div><!--/end row with 3 objects-->' %}


    {% endif %}

{% endfor %}

此代码不起作用,因为循环标记计数第一个和第二个。我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:0)

在我看来,你不应该在模板中这样做。您应该在视图中创建这样的对象,然后进行迭代。

例如,现在你有object这是一个数组:

object = ['object1', 'object2', 'object3', 'object4' , 'object5', 'object6', '...']

我的想法是让这个对象看起来像这样:

object = (['object1', 'object2'], ['object3', 'object4' , 'object5'], [...])

答案 1 :(得分:0)

这是我现在使用的代码。它似乎工作。在第一页上,两个第一篇文章组合在一起,其余的分组为三个。在其他页面上,所有文章都按三个分组。

{% for object in object_list %}


    {% if forloop.first and page_number == 1 %}
        <div class="row">

            <div class="news-article">
            {{ object.title }}
            </div>


    {% elif forloop.counter == 2 and page_number == 1 %}

            <div class="news-article">
            {{ object.title }}
            </div>


        </div><!-- /first row-->


    {% else %}


        {% cycle '<div class="row">' '' '' %}

            <div class="news-article">
            {{ object.title }}
            </div>


    {% endif %}

    {% if page_number == 1 %}
        {% if not forloop.counter == 1 and not forloop.counter == 2  %}
            {% cycle '' '' '</div><!--/row-->' %}
        {% endif %}

    {% else %}
        {% cycle '' '' '</div><!--/row-->' %}
    {% endif %}


    {% if not forloop.counter|divisibleby:"3" and forloop.last %}
        </div><!--row.last-->
    {% endif %}


{% endfor %}