每次都会重置在for循环中设置的上下文变量

时间:2018-08-20 22:11:08

标签: python django django-templates

我正在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']

我希望它做的是依次输出123,例如

<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。我希望它能给我12345。但是它给了我12222

更令人惊讶的是,如果我不拆开元组,即{% for t in sections %},它将给我12342

我真的不明白这里发生了什么。我不应该更改模板标签中的context吗?实现我想要做的正确方法是什么?

编辑:我知道我可以在模板中使用forloop.counterlength来计算数字,但这实际上不是可行的策略,因为我将使用多个for循环。

编辑2:由于我正在运行调试器,所以我知道模板标记被调用了5次,但是每次传递到context时都不会反映上次设置的值。

0 个答案:

没有答案