Django1.11.7+django-tables2 FBV下导出XLSX如何设置文件名?
解决Django FBV下django-tables2导出XLSX自定义文件名的问题
你遇到的TypeError是因为exporter.response()方法的参数使用错误——这个方法的第一个位置参数就是导出文件的完整文件名(包含扩展名),你同时传了位置参数'table.xlsx'和关键字参数filename='my_test',导致参数重复冲突了。
正确的FBV写法
直接把你想要的文件名(带.xlsx后缀)作为第一个参数传给response()方法即可:
def export_payment_list(request): _table = PaymentTable4Export(Payment.objects.all().order_by('-payment_date')) RequestConfig(request).configure(_table) exporter = TableExport('xlsx', _table) # 自定义文件名直接作为参数传入 return exporter.response('my_test.xlsx')
进阶:动态生成文件名
如果需要动态生成文件名(比如加上导出日期),可以这样写:
from datetime import datetime def export_payment_list(request): _table = PaymentTable4Export(Payment.objects.all().order_by('-payment_date')) RequestConfig(request).configure(_table) exporter = TableExport('xlsx', _table) # 生成带日期的动态文件名 export_filename = f"payment_records_{datetime.now().strftime('%Y%m%d_%H%M')}.xlsx" return exporter.response(export_filename)
补充说明
官方文档里CBV的export_name参数,是给ExportMixin用的配置项,用来指定文件名的基础部分;而在FBV中,我们直接操作TableExport实例的response()方法,只需要传入完整的文件名(含扩展名)作为第一个参数就可以了,不需要额外的filename关键字参数。
内容的提问来源于stack exchange,提问作者Davy
相关产品推荐
相关产品推荐

