django-tables2 导出自定义 URL 列

django-tables2 exporting custom URL column

大家好,

希望大家一切都好。

我有一个 table,我使用超链接自定义列呈现。

问题是当我导出到 CSV 时,它只给我超链接的文本,而不是超链接。

我想导出超链接而不仅仅是文本,这可能吗? (如果我需要切换到 xlsx 导出也可以) (更糟的是我只能让文本成为完整路径)

自定义列:

document_link = tables.TemplateColumn('<a href="{{record.document_file.url}}/" target="_blank">{{record.document_file}}</a>', verbose_name="Document location")  

提前致谢,

我建议使用“包含和排除列” https://django-tables2.readthedocs.io/en/latest/pages/export.html#including-and-excluding-columns

exclude_from_export=True 添加到 document_link 字段,以及一个不可见的 document_link_for_csv 字段。

class DocumentTable(tables.Table):

    document_link = tables.TemplateColumn(
        '<a href="{{record.document_file.url}}/" 
        target="_blank">{{record.document_file}}</a>', 
        verbose_name="Document location", 
        exclude_from_export=True
    )
    document_link_for_csv = columns.Column(
        visible=False, 
        accessor="document_file__url"
    )

根据评论更新: 您可以 ,然后进行自定义渲染和 request.build_absolute_uri()

class DocumentTable(tables.Table):

    document_link = tables.Column(
        verbose_name="Document location", 
        exclude_from_export=True
    )
    document_link_for_csv = columns.Column(
        visible=False, 
        accessor="document_file__url"
    )

    def render_document_link_for_csv(self, value, record):
        return format_html(
            '<a href="{}/{}/" target="_blank">{}</a>,
            request.build_absolute_uri(),
            record.document_file.url,
            record.document_file
        )

这是我设法做到这一点的最后方法:

class DocumentTable(ExportMixin,tables.Table):

    document_link = tables.TemplateColumn('<a href="{{record.document_file.url}}/" target="_blank">{{record.document_file}}</a>', verbose_name="Document location", exclude_from_export=True)  
    document_URL = tables.TemplateColumn('render_replaces_this',visible=False)
    
    def render_document_URL(self, value, record):
        return format_html(
            '{}{}',
            self.request.META['HTTP_HOST'],
            record.document_file.url,
        )