Class 未调用 Django 模板中的属性

Class attributes in django templates not being called

已经看了一段时间了,我似乎无法弄清楚我做错了什么。

我有这样的看法

def format_guide_datasheet(request):
    return render(request, 'input/format_guide_datasheet.html', {'readers': settings.INSTALLED_DATASHEET_READERS})

settings.INSTALLED_DATASHEET_READERS 是 classes:

的数组
from input.readers import ExcelReader

INSTALLED_DATASHEET_READERS = [ExcelReader]

ExcelReader class:

class ExcelReader(Reader):
    @staticmethod
    def name():
        return 'Excel'

问题是,我似乎无法在我的模板中调用这些 class 的任何属性。例如,在 input/format_guide_datasheet.html:

{{ readers }}

正确输出

 [<class 'input.readers.ExcelReader'>] 

{% for reader in readers %}
<li>
{{ reader }}
{{ reader.name }}
</li>
{% endfor %}

只输出 li 个标签...

我已经尝试使用基本属性,class方法和静态方法,但似乎没有任何效果...

有人知道出了什么问题吗?

谢谢!

我把你上面的代码粘贴到一个框架 Django 1.7.3 应用程序中,它可以工作。我得到这个输出:

<li>
&lt;input.readers.ExcelReader instance at 0x108a7ecf8&gt;
Excel
</li>

上面代码中唯一缺少的部分是 Reader class,我将其声明为空 class:

class Reader:
    pass

也许这在不同版本的 Django 中工作方式不同,或者您有一些额外的配置或代码覆盖了默认的 Django 功能。也许在您的应用程序中某处有另一个 'name' 属性的定义,它覆盖了 ExcelReader class 的静态 'name' 方法。无论是什么问题,都无法从问题中发布的信息来确定。

找到问题了,谢谢大家的帮助!

问题是,当在 django 模板中调用一个 class 的变量时,django 似乎会自动实例化它(就像在模板中调用函数时一样)。 然而,input.readers.ExcelReaderinit 函数有 1 个必需参数,这意味着 django 模板在实例化此 class.[=11= 的对象时出错]

解决方法是使该参数可选。现在一切正常。