You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

django-tables2中TemplateColumn表头用gettext翻译报错如何解决?

解决方法

该报错是旧版本django-tables2中TemplateColumn对惰性翻译对象的兼容处理不完善导致的。普通Column类内部做了特殊适配,可以直接接收翻译对象,但TemplateColumn在类属性加载阶段直接求值翻译对象时就会触发类型错误。

你可以按以下两种方案解决:

  • 方案一:替换翻译函数为惰性求值版本
    将你导入的gettext替换为gettext_lazy,gettext_lazy会推迟翻译求值的时机,避开类属性加载时的兼容问题,导入示例:

    from django.utils.translation import gettext_lazy as _
    

    替换后你原来的verbose_name=_(u'Delete')写法就可以正常运行。

  • 方案二:统一在Meta类配置列名
    如果替换翻译函数后仍然报错,可以把所有列的verbose_name放到Meta类的verbose_names字典中统一配置,完整代码示例如下:

    from django.utils.translation import gettext_lazy as _
    import django_tables2 as tables
    from . import models
    
    class ModelTable(tables.Table):
        name = tables.columns.Column()
        edit = tables.TemplateColumn('<a href="{% url "edit_my_model_instance" record.id %}">Edit</a>')    
        delete = tables.TemplateColumn('<a href="{% url "del_my_model_instance" record.id %}">Delete</a>')    
    
        class Meta:
            model = models.Model
            verbose_names = {
                'edit': _('Edit'),
                'delete': _('Delete'),
            }
    

补充说明:django-tables2 >= 2.0版本已经修复了这个兼容问题,直接给TemplateColumn传verbose_name参数即可正常生效,如果你使用的是更旧的版本,优先使用方案二即可稳定解决问题。

内容的提问来源于stack exchange,提问作者nassim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:45:04