我有一个Python对象,它是容器子类的一个实例。因此,此对象x
的行为类似于x['name']
。该对象也有方法,比如x.bar()
。
如何从Django模板中调用x.bar
?在模板中x.bar
将始终首先评估为x['bar']
,这将None
。
我能想到的最好的方法是创建一个没有x
的对象阴影getitem
。但我不能delattr
__getitem__
。
有更好的想法吗?没有在上下文或模板标记中手动传递这些调用的结果。
感谢。
答案 0 :(得分:1)
这是Django模板进行表达式评估的一个根本缺陷。查看模板标记{% expr -arbitrary-python-expression- %}
以获取解决方法。例如。 {% expr x.bar(1,2,3) as snort %}
在当前上下文中为您提供了一个名为snort
的新变量。
或者,您可以尝试Jinja2个模板。它们非常接近Django,但它们允许完整的Python。
注意:Jinja2与不是与Django相同的模板系统,如果你使用依赖于模板系统的任何页面嵌入式django应用程序,这可能会破坏它们。对于{% expr %}
代码,情况并非如此。