在调用之前更改自定义模板标记

时间:2011-11-08 10:45:35

标签: django

我一直在修改这个开源的Django项目供我自己使用。他们现有自定义模板标签,在Node的渲染功能中,它们具有以下内容:

        plate = resolve_variable(self.plate, context)
        context.push()
        context['self'] = plate
        template = Template(f(str))
        result = template.render(context)
        context.pop()
        return result

我想创建这个自定义标记的几个不同版本,但实际上它们只会在上面调用的函数f上有所不同。因此,我不仅可以多次复制整个标记代码,而且可以在渲染使用此标记的模板之前尝试将f设置为视图函数中的其他内容。但它不起作用,因为模板编译过程显然只查看标记源文件本身的内容,并且不考虑对它的动态更改(例如更改f)。

那么,我怎样才能实现这一点 - 以某种方式从外部动态改变f然后调用标签。

1 个答案:

答案 0 :(得分:0)

我真正想要做的是为模板标签指定一个替代函数的可选参数,如果没有提供,则使用默认函数 - 如果在提供顶级调用时递归调用自定义标记,则除外此可选参数,在这种情况下,较低级别的调用应使用相同的函数。所以,我想我可以在Node类中将类变量f设置为新函数(如果它在标记中提供),因此Nodeclass的递归调用将使用它。然后在顶层,f在节点的__del__方法(析构函数)中设置回null。