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