我正在使用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
我不能正确创建课程吗?创建新的template_name
实例时,为什么没有传递类中指定的DeleteColumn
值?
有人可以指出正确的方向吗?
答案 0 :(得分:1)
如果查看TemplateColumn
(http://django-tables2.readthedocs.io/en/latest/_modules/django_tables2/columns/templatecolumn.html)的来源,您会发现__init__()
检查template_column
或template_name
属性,并且如果找不到,则抛出您提到的ValueError
。
现在的问题是,您在班级中调用了template_name
后,将super(...).__init__
属性设置为 ,因此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=''
我希望它现在可以工作!