django tables2在标题上显示排序箭头

wko9yo5t  于 2023-04-22  发布在  Go
关注(0)|答案(2)|浏览(116)

我正在使用django tables2,我认为在标题列上有向上和向下箭头来指示当前排序顺序会很有用,特别是当默认排序是在第一列以外的列上时。
尝试使用CSS,但没有运气,关于如何做到这一点,有任何建议或示例吗?

wd2eg0qa

wd2eg0qa1#

this question中提供的答案可能会解决你的问题,尽管在不知道你已经用CSS尝试过什么的情况下很难确定。
django-tables 2的templates that come built-in将所有列属性渲染到最终的HTML中,因此定义为orderable=True的列将生成带有"orderable"类的列标题标签(例如<th class="orderable">)。此外,已选择升序或降序排序的列将在渲染时添加ascdesc类标识符。
因此,您可以设置一个CSS规则,根据orderable列的状态呈现三个不同的箭头图像:

table.table thead th.orderable {
    background: url(path_to_unsorted_indicator_image)
}

table.table thead th.asc.orderable {
    background: url(path_to_ascending_indicator_image)
}

table.table thead th.desc.orderable {
    background: url(path_to_descending_indicator_image)
}
6ljaweal

6ljaweal2#

我尝试了这个答案,但更喜欢列标题的详细名称更接近文本。我在Tableinit()中添加了代码:

for i in range(len(self.columns)):
        if is_blank(self.columns[i].column.verbose_name):
            my_label = self.columns[i].name.replace("_", " ").strip()
        else:
            my_label = self.columns[i].column.verbose_name.strip()

        arrow = '&#x21f5;' if self.columns[i].orderable else ""

        self.columns[i].column.verbose_name = mark_safe(f'{my_label} {arrow}')

为了捕获一个不同的图标来表示排序,我使用了Tables.before_render()。通过查看请求,GET字段有一个键为“sort”的dict,值为field_name。如果是反向排序,field_name有一个-前缀。
这看起来有点像黑客,但我找不到更好的方法。结果是列标题可以反映排序。

相关问题