在某个迭代次数后显示文本

时间:2013-10-14 07:19:34

标签: django django-templates

以下是我的模板目前的样子:

{% for message in messages %}
    <p>{{ message.title }}</p>
    <p>{{ message.content }}</p>
{% empty %}
    <p>No messages</p>
{% endfor %}

工作正常。但问题是有时候有超过20条消息,所以我想先显示3,然后添加一个“更多”按钮,这将显示其余的JavaScript。之后我会处理JavaScritp部分,但目前我想在第三次迭代后打印“更多”链接。

最好的方法是什么?将变量初始化为0并将其递增+检查每次迭代?或者是否有一个特殊的标签,它给出了当前的迭代次数?

1 个答案:

答案 0 :(得分:1)

您获得forloop.counter变量以指示迭代次数,您可以将其用作

{% for message in messages %}
    {%if forloop.counter < 4 %}
        <p>{{ message.title }}</p>
        <p>{{ message.content }}</p>
    {%endif%}
{% empty %}
    <p>No messages</p>
{% endfor %}
{% if messages|length > 3 %}
    Link for more 
{%endif%}

另一种方法是将列表分割为3个元素,并仅对其进行迭代。

{% for message in messages|slice:":3" %}
        <p>{{ message.title }}</p>
        <p>{{ message.content }}</p>
{% empty %}
    <p>No messages</p>
{% endfor %}
{% if messages|length > 3 %}
    Link for more 
{%endif%}