如何在Django模板中执行for循环?

时间:2011-06-02 20:27:59

标签: python django

我知道怎么做一个forloop从列表中获取对象但是在这里我说的是forloop以便重复某些次数。就像在PHP中我会这样做:

for (i=0; i < 10; i++) {

   hello <br />

}

这将输出你好10次。那么如何在django模板语言中做到这一点?

3 个答案:

答案 0 :(得分:10)

Django模板语言有For循环。参见:

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

....你可能会注意到你所追求的那种“重复”功能没有明确的镜头。例如,您可以在视图中定义一个int(在您的情况下为i)并将其范围传递到模板上下文中,然后遍历该int的范围(当然,在Python中,int对象本身不可迭代)

然而,更多'pythonic'方法是明确的:问问自己,“为什么我要迭代十次?”这个页面上显示的椰子数量是关于携带它们的勇敢的燕子吗?如果是这样,不要遍历数字10 - 而是直接遍历椰子对象列表,并在forloop中执行您的表示逻辑。

{% for coconut in coconuts %}
    hello, {{forloop.counter}} {# Something useful about the coconut goes here. #}
{% endfor %}

假设有十个椰子,这将产生与您的示例相同的结果。但是,正如我在评论中指出的那样,你可以在循环中对椰子对象做一些更有用的事情。

如果你真的,绝对觉得你需要循环一个静态范围而不从业务逻辑中传入它,你可能会发现这个片段很有用:

http://djangosnippets.org/snippets/1899/

同样,我要提醒您确保您正在做您真正想做的事情,而不仅仅是巩固您知识管理的深层次。

答案 1 :(得分:2)

您可以使用custom filter轻松完成此操作:

from django.template import Library
register = Library()

@register.filter
def range(value):
    return xrange(value)

然后在你的模板中:

{% for i in 10|range %}
    hello <br/>
{% endfor %}

答案 2 :(得分:0)

这可以通过实现自己的模板标记来重复某些块来实现。看一下官方文档 https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

这样你可以通过写:

来使用它
{% repeat 3 %}
   <div>html to repeat</div>
{% endrepeat %}

这是2009年的一个旧片段,它完成上述操作,虽然可能需要更新才能使用Django 1.3,但应该足以让你开始: http://djangosnippets.org/snippets/1499/