Django模板for循环中实现变量i自增的方法求助
Django模板中实现for循环内自增变量的解决办法
方法一:用Django内置的forloop.counter0(最简便)
Django的for循环自带内置计数器,forloop.counter0正好从0开始,每次迭代自动加1,完全匹配你的需求。直接替换模板里需要自增变量的位置就行:
修改后的代码:
{% for match in response %} <tr> <td>{{ forloop.counter0 }}</td> <!-- 这里就是初始为0、每次递增1的变量 --> <td>{{ match.i.team.name }}</td> <td>{{ match.i.games.played }}</td> <td>{{ match.i.games.win.total }}</td> <td>{{ match.i.games.lose.total }}</td> <td>{{ match.i.games.win.percentage }}</td> </tr> {% endfor %}
另外提一句:你原来的代码里多写了一个</tr>,记得删掉,不然会导致HTML结构错误。
方法二:自定义模板变量(适用于复杂场景)
如果需要更灵活的控制(比如初始值不是0,或者中途要调整变量),可以自定义模板过滤器:
- 在你的Django应用下创建
templatetags文件夹,新建custom_tags.py文件,写入:
from django import template register = template.Library() @register.filter def add_one(value): return value + 1
- 在模板开头加载这个自定义标签,然后结合
with标签使用:
{% load custom_tags %} {% with i=0 %} {% for match in response %} <tr> <td>{{ i }}</td> <td>{{ match.i.team.name }}</td> <td>{{ match.i.games.played }}</td> <td>{{ match.i.games.win.total }}</td> <td>{{ match.i.games.lose.total }}</td> <td>{{ match.i.games.win.percentage }}</td> </tr> {% with i=i|add_one %}{% endwith %} {% endfor %} {% endwith %}
这种方法相对繁琐,没有特殊需求的话优先用第一种。
内容的提问来源于stack exchange,提问作者Cian Sullivan
相关产品推荐
相关产品推荐

