Django的简单电子表格导出

django-tabular-export的Python项目详细描述


Landscape.io Code Qualityhttps://travis-ci.org/LibraryOfCongress/django-tabular-export.png?branch=masterDocumentation Status

从django 1.8+导出简单的电子表格

文档

此模块包含获取(头、行)对并返回带有xlsx或 csv下载和django管理操作,可以添加到任何modeladmin中进行通用导出。它提供了 两个函数(export_to_csv_responseexport_to_xlsx_response)接受一个文件名, 列标题列表和django QuerySet、类列表对象或生成器,并返回响应。

目标

  • 此项目不是一个通用的电子表格操作库。唯一的目标是 快速安全地导出数据。
  • 这个api故意很简单,让您可以完全控制头或 数据。flatten_queryset只对两种类型的数据进行特殊处理:None将转换为 空字符串和datedatetime实例将使用isoformat()序列化。全部 其他值将被指定为文本数据类型,以避免在出现这些值时Excel中的数据损坏 类似于当前区域设置中的日期。
  • unicode安全性:使用django的 force_text 函数,并始终以utf-8的形式发出
  • performance:已知代码可以处理多达数十万行的数据集。CSV响应 使用StreamingHttpResponse,使用最少的内存,并快速启动。Excel(XLSX)响应不能为 流式但是xlsxwriter是一种更快的实现 并启用了内存大小优化。

快速启动

安装Django表格导出:

pip install django-tabular-export

然后在项目中使用:

from tabular_export import export_to_csv_response, export_to_xlsx_response, flatten_queryset

def my_view(request):
    return export_to_csv_response('test.csv', ['Column 1'], [['Data 1'], ['Data 2']])


def my_other_view(request):
    headers = ['Title', 'Date Created']
    rows = MyModel.objects.values_list('title', 'date_created')
    return export_to_excel_response('items.xlsx', headers, rows)


def export_using_a_generator(request):
    headers = ['A Number']

    def my_generator():
        for i in range(0, 100000):
            yield (i, )

    return export_to_excel_response('numbers.xlsx', headers, my_generator())

def export_renaming_columns(request):
    qs = MyModel.objects.filter(foo="…").select_related("…")
    headers, data = flatten_queryset(qs, field_names=['title', 'related_model__title_en'],
                                     extra_verbose_names={'related_model__title_en': 'English Title'})
    return export_to_csv_response('custom_export.csv', headers, data)

管理集成

有两种方便方式admin actions 这使得添加“导出到Excel”和“导出到CSV”操作变得简单:

from tabular_export.admin import export_to_csv_action, export_to_excel_action

class MyModelAdmin(admin.ModelAdmin):
    actions = (export_to_excel_action, export_to_csv_action)

默认列将与在ModelAdmin的默认值上调用values_list相同 由ModelAdmin.get_queryset()返回的queryset。如果要自定义此项,只需声明一个新的 对您的ModelAdmin执行操作,它将执行任何必要的数据准备:

from tabular_export.admin import export_to_excel_action

class MyModelAdmin(admin.ModelAdmin):
    actions = ('export_batch_summary_action', )

    def export_batch_summary_action(self, request, queryset):
        headers = ['Batch Name', 'My Computed Field']
        rows = queryset.annotate("…").values_list('title', 'computed_field_name')
        return export_to_excel_response('batch-summary.xlsx', headers, rows)
    export_batch_summary_action.short_description = 'Export Batch Summary'

调试

TABULAR_RESPONSE_DEBUG = True设置将导致所有视图返回HTML表

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法从组合框中选择值。需要JS替代方案   打印带有规范问题的Java打印程序?   使用Xmodem传输文件内容时的附加ASCII字符的java传输   java JAXB通过socket和流读取器块   java“错误:在类Grad中找不到Main方法,请将Main方法定义为:public static void Main(字符串[]args)”   如何在Java中将图像从彩色转换为黑白(灰度)   java如何使用Google云连接服务器发送上游GCM消息   JAVA中的JSON文件字段交叉点   什么是“搜索:{…}”/Java中正式使用的“中断搜索”语法?   由于明显的类路径冲突导致java ToDiscoverable强制转换错误?   java可以成为一种语言。类文件不能添加到URLClassLoader的urlpath   Android设备上会话管理的java最佳实践   Java8Java上的Google应用程序引擎。开发服务器上的时间不可用?   java Derby数据库导出为单个文件?   java如何让jmeter根据访问日志行中的时间戳进行日志重放   访问EJB分离接口时的java IllegalAccessException   java使用JsonPath在不知道密钥的情况下提取值   java将文件保存到Jersey API中的服务器应用程序目录   jsoup中的java Http异常   java有没有错误?