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

for i = 1 to n

当前回答

你可以在views.py的上下文中传递range(n)而不是n。这将给你一个可迭代的列表。

context['range']= range(n)

然后你可以这样迭代你的模板:

{% for i in range %}
   <!-- your code -->
{% endfor %}

其他回答

不幸的是,Django模板语言不支持这一点。有一些建议,但它们看起来有点复杂。我只要在上下文中放一个变量:

...
render_to_response('foo.html', {..., 'range': range(10), ...}, ...)
...

在模板中:

{% for i in range %}
     ...
{% 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>

我对这个问题的看法,我认为是最蟒蛇的。在你的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 %}

对于那些寻找简单答案的人来说,只需要显示一个数值的数量,比如从100个帖子中添加3个,例如添加{% For post in posts|slice:"3" %}并正常循环,只会添加3个帖子。

也许像这样?

{% for i in "x"|rjust:"100" %}
...
{% endfor %}