Django模板:变量有多灵活?

时间:2013-07-31 14:36:16

标签: django django-templates

我需要在teplate中有一个变量,它基本上是for循环的计数器。问题是:我需要操作它,取决于我正在处理的for-element,我将不得不重置计数器(for循环中的IF)。

这是否可以在Django模板中使用?

这基本上就是我想要的:

{% i = 0 %}
{% for l in list %}
    {% if i == 5 %}
        {% i = 0 %}
        Do Something
        <br>
    {% else %}
        {% i = i + 1 %}
    {% endif %}
{% endfor %}

2 个答案:

答案 0 :(得分:1)

你想要的是Django模板语言提供的forloop.counter变量。

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

您可以这样做:

{% for element in list %}
    {% if forloop.counter > 5 %}
        Do something
    {% else %}
        Do something else
    {% endif %}
{% endfor %}

如果你想循环地做一些事情,你基本上做了一个模运算符(http://en.wikipedia.org/wiki/Modulo_operation),不幸的是,Django Template并没有这个,但它确实允许'divisible by'运算符。

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

所以你要添加:

{% if {{ forloop.counter|divisibleby:"5" }} %}
    {{ whatever }}
{% endif %}

答案 1 :(得分:1)

你不能使用内置标签:

http://www.mail-archive.com/django-users@googlegroups.com/msg27399.html

以下摘录可能是一个很好的起点:

编辑:对于记录,OP需要一个带有divisibleby的条件。请参阅接受的答案here以及此答案中的评论。