Python 在Django模板中使用abc.abc类对象:Django为什么尝试实例化它?

Python 在Django模板中使用abc.abc类对象:Django为什么尝试实例化它?,python,django,django-templates,abc,Python,Django,Django Templates,Abc,我想在Django模板中使用abc.abc抽象类对象(不是实例)。在这些类中,我有几个类方法(用@classmethod decorator定义),我想用来显示信息 当我试图显示列表对象时:{{dataset.provided_services}} 我将显示一个类对象列表: [<class 'dataset_services.table_service.QueryTableService'>, <class 'dataset_services.table_service.Exp

我想在Django模板中使用abc.abc抽象类对象(不是实例)。在这些类中,我有几个类方法(用@classmethod decorator定义),我想用来显示信息

当我试图显示列表对象时:
{{dataset.provided_services}}

我将显示一个类对象列表:

[<class 'dataset_services.table_service.QueryTableService'>, <class 'dataset_services.table_service.ExportTableService'>]
[,]
但如果我试着重复这个列表:

<ul>
     {% for service in dataset.provided_services %}
     <li>
         <p>{{ service.name }}</p>
         <p>{{ service.description }}</p>
     </li>
     {% endfor %}
 </ul>
    {dataset.provided_services%}
  • {{service.name}

    {{service.description}}

  • {%endfor%}
我得到一个错误,告诉我我不能用抽象方法实例化抽象基类,就好像django试图实例化类对象一样。。。这是正常的行为吗?可以在Django模板中使用类对象而不实例化它们吗


PS:我正在使用Django 1.8.5和Python 3.4。

默认情况下,如果Django模板引擎检测到您使用的变量是可调用的,它将在访问子属性之前调用它。在需要函数结果的情况下(django不允许显式调用函数),这很方便。如果您不希望在django模板中调用特定的可调用对象,则可以在对象上将模板中的标志
do\u not\u call>设置为
True
。在您的例子中,您可能希望在基类上执行此操作,因此每个子类也都有此属性

TL;博士: 设置
abc.abc.do\u not\u call\u in\u templates=True

有关django模板语言如何处理变量的完整文档,以及有关
请勿调用\u in_templates标志的更多信息,请参阅