从Django模板访问容器的方法

时间:2012-12-12 18:30:12

标签: python django

我有一个Python对象,它是容器子类的一个实例。因此,此对象x的行为类似于x['name']。该对象也有方法,比如x.bar()

如何从Django模板中调用x.bar?在模板中x.bar将始终首先评估为x['bar'],这将None

我能想到的最好的方法是创建一个没有x的对象阴影getitem。但我不能delattr __getitem__

有更好的想法吗?没有在上下文或模板标记中手动传递这些调用的结果。

感谢。

1 个答案:

答案 0 :(得分:1)

这是Django模板进行表达式评估的一个根本缺陷。查看模板标记{% expr -arbitrary-python-expression- %}以获取解决方法。例如。 {% expr x.bar(1,2,3) as snort %}在当前上下文中为您提供了一个名为snort的新变量。

或者,您可以尝试Jinja2个模板。它们非常接近Django,但它们允许完整的Python。

注意:Jinja2与不是与Django相同的模板系统,如果你使用依赖于模板系统的任何页面嵌入式django应用程序,这可能会破坏它们。对于{% expr %}代码,情况并非如此。