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>
Accepts the same arguments as the 'range' builtin and creates a list containing
the result of 'range'.
Syntax:
{% mkrange [start,] stop[, step] as context_name %}
For example:
{% mkrange 5 10 2 as some_range %}
{% for i in some_range %}
{{ i }}: Something I want to repeat\n
{% endfor %}
Produces:
5: Something I want to repeat
7: Something I want to repeat
9: Something I want to repeat
16 回答
也许是这样的?
你可以通过绑定
到模板,然后做
请注意,您将获得基于0的行为(0,1,... n-1) .
(针对Python3兼容性进行了更新)
这基本上需要
range
函数 . 为此创建了一个Django功能票证(https://code.djangoproject.com/ticket/13088),但以"won't fix"结束,并带有以下注释 .他们有一个好点 - 模板应该是视图的非常简单的表示 . 您应该在视图中创建有限的必需数据,并在上下文中传递给模板 .
如果数字来自模型,我发现这是该模型的一个很好的补丁:
我只是将流行的答案更进一步,使其更加强大 . 这允许您指定任何起点,例如0或1 . 它还使用了python的范围功能,其末端较少,因此可以直接使用列表长度 .
然后在您的模板中只包含上面的模板标记文件并使用以下内容:
现在你可以做1-6而不只是0-6或硬编码 . 添加一个步骤需要一个模板标签,这应该涵盖更多用例,因此这是向前迈出的一步 .
此方法支持标准
range([start,] stop[, step])
函数的所有功能<app>/templatetags/range.py
用法:
产量
You can pass :
{'n':range(n)}
To use template :
{%for i in n%} ... {%endfor%}
我在这个问题上非常努力,我在这里找到了最好的答案:(来自how to loop 7 times in the django templates)
你甚至可以访问idx!
views.py:
HTML:
您应该在模板中使用“slice”,例如:
在views.py中
在store_list.html中:
你没有传递
n
本身,而是range(n)
[从0到n-1的整数列表],从你的视图到你的模板,在后者你做{% for i in therange %}
(如果你绝对坚持从1到1而不是正常的从0开始的索引你可以在循环体中使用forloop.counter
;-) .您可以使用:
{% with ''|center: i as range %}
我使用了一种简单的技术,适用于没有特殊标签且没有其他上下文的小案例 . 有时这会派上用场
根据您的需要调整“xxxxxxxxxxxxxxxxxxxx”的长度 . “xxx”只做3次迭代等 .
只是想让其他人遇到这个问题...我已经创建了一个模板标签,可以让你创建一个
range(...)
:http://www.djangosnippets.org/snippets/1926/我对这个问题的看法,我认为是最好的 . 我在templatetags目录中保留了my_filters.py .
你会这样使用:
不幸的是,这是Django模板语言中的not supported . 有一个couple的suggestions,但它们看起来有点复杂 . 我只想在上下文中放一个变量:
并在模板中: