我正在使用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_column
或template_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=''
我希望它现在有效!