为什么计数器标签在 Django 中没有按预期工作?

Why counter tag is not working as expected in django?

https://djangosnippets.org/snippets/2619/

根据上面的代码片段,如果我们在初始化后访问模板中的 {{ counter_var }},它应该 return 以前的计数。但在我的例子中它没有 return 任何东西。

模板代码

<div class="question_number pull-left">Q{% counter %}. </div>
...
<script>var no_of_questions={{ counter_var }}</script>


即使我尝试通过将视图中的上下文变量 counter_var 设置为 {'counter_var':0,...} 然后它 returns '0'.

如何让它工作以使其成为 return 之前的计数器?
例如

Q1. 
Q2.

那么 counter_var 应该 return 2 而不是什么都没有。

Django: 1.8.6
Python: 2.7

编辑:
模板标签已注册并且正确打印 Q<count>. 除了 counter_var

调试一段时间后,可以使用此代码使其正常工作。

#Adapted from https://djangosnippets.org/snippets/2619/

@register.tag(name='counter')
def do_counter(parser, token):
    """
    Counter tag. Can be used to output and increment a counter.

    Usage:
    - {% counter %} to output and post-increment the counter variable
    - {% counter reset %} to reset the counter variable to 1
    - {% counter last %} to access the last counter variable without incrementing

    """
    try:
        tag_name, request = token.contents.split(None, 1)
    except ValueError:
        request = None

    if request == 'reset':
        reset = True
        last = False
    elif request == 'last':
        last = True
        reset = False
    else:
        reset = False
        last = False

    return CounterNode(reset, last)


class CounterNode(template.Node):
    def __init__(self, reset, last):
        self.reset = reset
        self.last= last

    def render(self, context):
        # When initializing or resetting, set counter variable in render_context to 1.
        if self.reset or ('counter' not in context.render_context):
            context.render_context['counter'] = 1

        # When resetting, we don't want to return anything
        if self.reset:
            return ''
        # When ask for last, return previous count
        if self.last:
            return context.render_context['counter']-1

        counter = context.render_context['counter']

        # Increment counter
        context.render_context['counter'] += 1

        # Return counter number
        return counter

问题是在最新的 django(至少 1.8.6)中,上下文变量不能使用模板标签更新,所以我必须访问在渲染阶段创建的 render_context 变量。

我已添加 Guthub gist