0

我有一个 Python 对象,它是容器子类的一个实例。所以这个对象,x,可以表现得像x['name']。这个对象也有方法,比如说x.bar()

如何x.bar从 Django 模板调用?在模板x.bar中将始终被评估为x['bar']第一个,这给出了None.

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

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

谢谢。

4

1 回答 1

1

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

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

注意:Jinja2Django 的模板系统不同,如果您使用任何依赖于模板系统的页面嵌入 django 应用程序,这可能会破坏它们。{% expr %}对于标签来说,情况并非如此。

于 2012-12-12T19:12:30.243 回答