我如何写一个数字循环在Django模板?我的意思是

for i = 1 to n

当前回答

我对这个问题的看法,我认为是最蟒蛇的。在你的apps templatetags目录中创建一个my_filters.py。

@register.filter(name='times') 
def times(number):
    return range(number)

在模板中的用法:

{% load my_filters %}
{% for i in 15|times %}
    <li>Item</li>
{% endfor %}

其他回答

我对这个问题的看法,我认为是最蟒蛇的。在你的apps templatetags目录中创建一个my_filters.py。

@register.filter(name='times') 
def times(number):
    return range(number)

在模板中的用法:

{% load my_filters %}
{% for i in 15|times %}
    <li>Item</li>
{% endfor %}

我只是把流行的答案做得更深入一些,让它更健壮。这允许您指定任何起点,例如0或1。它还使用了python的range特性,其中末尾少了一个,因此可以直接与列表长度一起使用。

@register.filter(name='range')
def filter_range(start, end):
    return range(start, end)

然后在你的模板中只包括上面的模板标签文件,并使用以下:

{% load myapp_filters %}

{% for c in 1|range:6 %}
    {{ c }}
{% endfor %}

现在你可以用1-6代替0-6或者硬编码。添加一个步骤将需要一个模板标签,这应该涵盖更多的用例,所以这是向前迈出的一步。

我使用了一种简单的技术,可以很好地处理没有特殊标记和附加上下文的小情况。有时这很有用

{% for i in '0123456789'|make_list %}
    {{ forloop.counter }}
{% endfor %}

你可以通过:

{'n':范围(n)}

使用模板:

{% for I in n %} ... {% endfor %}

你不传递n本身,而是传递range(n)[包含从0到n-1的整数列表],从你的视图到你的模板,在后者中,你在range %}中为i执行{%(如果你绝对坚持以1为基础,而不是正常的以0为基础的索引,你可以使用forloop。循环体中的计数器;-)。