Django-tables2 子类错误(类属性未传递给实例化的对象)



我正在使用django-tables2并尝试创建一个新的DeleteColumn类:

tables.py

class DeleteColumn(tables.TemplateColumn):
def __init__(self, *args, **kwargs):
super(DeleteColumn, self).__init__(*args, **kwargs)
self.template_name='wakemeup/admin/delete_link.html'
self.verbose_name=''
class SchoolsTable(tables.Table):
test = DeleteColumn()
class Meta:
model = School

不过,我一直收到此错误:ValueError: A template must be provided

我没有正确创建类吗? 为什么在创建新的DeleteColumn实例时,类中指定的template_name值不会传递?

有人可以指出我正确的方向吗?

如果你看一下TemplateColumn(http://django-tables2.readthedocs.io/en/latest/_modules/django_tables2/columns/templatecolumn.html(的来源,你会发现__init__()检查template_columntemplate_name属性,如果两者都找不到,你提到的ValueError就会被抛出。

现在的问题是你在类中调用super(...).__init__后设置template_name属性,因此template_name属性为空!

编辑

抱歉,我没有非常彻底地检查源代码,它是以有趣的方式编写的,并且没有使用属性。无论如何,从我现在看到的情况来看,您需要覆盖__init__以将template_name参数传递给父级的 init,如下所示:

class DeleteColumn(tables.TemplateColumn):
def __init__(self, *args, **kwargs):
# This will pass ``template_name`` to the super().__init__ along with any args and kwargs
super(DeleteColumn, self).__init__(*args, template_name='wakemeup/admin/delete_link.html', **kwargs)
self.verbose_name=''

我希望它现在有效!

最新更新