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
相关产品推荐
相关产品推荐

