我如何写一个数字循环在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 %}

此方法支持标准range([start,] stop[, step])函数的所有功能

< >应用templatetags /太阳城. py

from django import template

register = template.Library()


@register.filter(name='range')
def _range(_min, args=None):
    _max, _step = None, None
    if args:
        if not isinstance(args, int):
            _max, _step = map(int, args.split(','))
        else:
            _max = args
    args = filter(None, (_min, _max, _step))
    return range(*args)

用法:

{% load range %}

<p>stop 5
{% for value in 5|range %}
{{ value }}
{% endfor %}
</p>

<p>start 5 stop 10
{% for value in 5|range:10 %}
{{ value }}
{% endfor %}
</p>

<p>start 5 stop 10 step 2
{% for value in 5|range:"10,2" %}
{{ value }}
{% endfor %}
</p>

输出

<p>stop 5
0 1 2 3 4
</p>

<p>start 5 stop 10
5 6 7 8 9
</p>

<p>start 5 stop 10 step 2
5 7 9
</p>

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

你可以通过:

{'n':范围(n)}

使用模板:

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

这需要一个范围函数。Django的一个特性票被提出了(https://code.djangoproject.com/ticket/13088),但关闭为“不会修复”以下的评论。

我对这个想法的印象是,它试图导致在模板中编程。如果您有一个需要呈现的选项列表,那么它们应该在视图中计算,而不是在模板中。如果这就像一个值范围那么简单,那就这样吧。

他们有一个很好的观点——模板应该是视图的非常简单的表示。您应该在视图中创建有限的必需数据,并将其传递给上下文中的模板。