我正在Python 3.6上运行Django 1.11。
我已经编写了一个自定义模板标签next_i
,以便每次调用它时都会在输出中添加1。
@register.simple_tag(takes_context=True)
def next_i(context):
if 'i' not in context:
context['i'] = 0
context['i'] += 1
return context['i']
我希望它做的是依次输出1
,2
,3
,例如
<p>{% next_i %}</p>
<p>{% next_i %}</p>
<p>{% next_i %}</p>
<p>{% next_i %}</p>
<p>{% next_i %}</p>
将成为
1
2
3
4
5
在我开始在模板中使用for循环之前,此方法可以正常工作,例如
<p>{% next_i %}</p>
{% for section, subsections in sections %}
<p>{% next_i %}</p>
{% endfor %}
<p>{% next_i %}</p>
其中sections
是元组列表。每个元组都有2个要解包的元素,列表本身的长度为3。我希望它能给我1
,2
,3
,4
,5
。但是它给了我1
,2
,2
,2
,2
。
更令人惊讶的是,如果我不拆开元组,即{% for t in sections %}
,它将给我1
,2
,3
,4
, 2
。
我真的不明白这里发生了什么。我不应该更改模板标签中的context
吗?实现我想要做的正确方法是什么?
编辑:我知道我可以在模板中使用forloop.counter
和length
来计算数字,但这实际上不是可行的策略,因为我将使用多个for循环。
编辑2:由于我正在运行调试器,所以我知道模板标记被调用了5次,但是每次传递到context
时都不会反映上次设置的值。