如何在Django模板中使用for循环?
我知道怎么用for循环从一个列表中获取对象,但这里我想说的是用for循环来重复某个操作一定的次数。就像在PHP中,我会这样做:
for (i=0; i < 10; i++) {
hello <br />
}
这样就会输出“hello”十次。那么在Django模板语言中怎么做呢?
3 个回答
你可以通过自己实现一个模板标签来重复某些代码块。可以看看官方文档,了解具体怎么做,链接在这里: 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/
你可以使用一个自定义过滤器来轻松实现这个功能:
from django.template import Library
register = Library()
@register.filter
def range(value):
return xrange(value)
然后在你的模板中:
{% for i in 10|range %}
hello <br/>
{% endfor %}
Django的模板语言里有“for”循环。你可以查看这个链接了解更多:
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for
不过,你可能会发现这里没有直接提供你想要的“重复”功能。比如,你可以在你的视图里定义一个整数(比如说i),然后把这个整数的范围传递到模板上下文中,然后在模板里循环这个整数的范围(当然,在Python中,整数本身是不能直接循环的)。
不过,更“符合Python风格”的做法是要明确你的意图:问问自己,“我为什么要循环十次?”这个数字是页面上展示的椰子的数量吗?如果是这样,那就不要单纯循环数字10,而是直接循环椰子对象的列表,把展示的逻辑放在这个循环里。
{% for coconut in coconuts %}
hello, {{forloop.counter}} {# Something useful about the coconut goes here. #}
{% endfor %}
假设有十个椰子,这样做的结果和你的例子是一样的。不过,正如我在评论中提到的,你在循环里可以对椰子对象做更多有用的事情。
如果你真的觉得需要在不从业务逻辑中传递的情况下循环一个固定的范围,你可以参考这个代码片段:
http://djangosnippets.org/snippets/1899/
再次提醒你,确保你做的事情是你真正想要的,而不是在掩盖你知识上的一些更深层次的问题。