Python 在Django模板中使用abc.abc类对象:Django为什么尝试实例化它?
我想在Django模板中使用abc.abc抽象类对象(不是实例)。在这些类中,我有几个类方法(用@classmethod decorator定义),我想用来显示信息 当我试图显示列表对象时: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
{{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标志的更多信息,请参阅