维护自定义标签调用之间的状态

时间:2011-09-21 23:38:54

标签: python django

有没有办法在标签调用之间保持状态?我需要存储传递给我创建的标记的最后一项。似乎我可以使用上下文来做到这一点,但它似乎不起作用。这是我的代码:

@register.simple_tag(takes_context=True)
def date_divider(context, date):
    if 'last_date' not in context or context['last_date'] != date:
        # display new date header
        context['last_date'] = date
    return date_header

问题是,即使传入的日期应与上下文中的日期匹配,也始终会创建新的日期标题。

我猜我在这里使用了上下文错误...有没有办法在上下文中存储这个最后日期,还是有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

第二次到达此标记时,您输入的上下文last_date似乎不再存在(例如,可能已经弹出了该上下文?)。一种(一种hackish)解决方案是确保将last_date插入“最高”的上下文中:

if 'last_date' not in context.dicts[0] or context.dicts[0]['last_date'] != date:
    context.dicts[0]['last_date'] = date

我发现,当您编写的标签不是“嵌套”时,通常需要这种方法。顺便说一句,我也发现这种标签本身就是黑客!

(不是说这个特例就是我的案例)。