【发布时间】:2012-10-25 07:16:24
【问题描述】:
我是 django-tables2 的重度用户,我曾考虑向 django-table 添加通用扩展:我希望允许用户能够将所有表数据导出到 excel(使用 xlwt)或只需单击表格附近某处的按钮即可生成 csv。
现在,我以非通用方式实现了这一点,这意味着我在模板中包含了一个 POST 表单和一个按钮,并添加了一个检查以查看按钮是否已被单击填充表格的视图。如果单击该按钮,则返回 xls 而不是普通模板。我还实现了一个通用函数,它获取 django-table2 表(任何表)并将其转换为 xlwt 工作表(以便将其放入工作簿)。
这工作正常,但由于我将在所有表格中使用此按钮,因此我不想将导出表单和按钮添加到包含表格的所有 html 模板中。此外,我不想将 POST 检查添加到我的所有视图中!这绝对不是 DRY :(
理想情况下,我希望有一个类,假设它是 ExportTable,它将扩展 django-tables2 的 Table 类并且可以用作替代品 - 当我使用 ExportTable 作为基类创建我的表时按钮和视图将具有导出表格所需的组件。据我了解,这是不可能的:(
有人可以向我建议我应该以哪种方式扩展 django-tables2 以便能够以最干燥的方式添加“导出”功能?这意味着我只能在我的模板中使用 {% render_table table %} 标记(或它的扩展),而无需在我的视图中添加检查以查看用户是否单击了导出按钮(以及当然不需要添加额外的视图和 url 路由来处理它)。通用类视图是要走的路吗?
我会接受最DRY和最完整的(我想有一些带有cmets的源代码)回答:)
【问题讨论】:
-
好问题,这是一个棘手的问题,我还没有遇到简单的解决方案。这是与支持表格上的通用“动作”类似的问题。如果您乐于使用
SingleTableView,您可以在那里添加钩子,因为您可以访问请求。
标签: python django django-tables2