1

当 django-tables2 渲染一个未排序的表时,我想按一列排序,我点击它,默认行为是按升序排序。

有什么办法可以更改它,以便第一次单击按降序排序?

4

1 回答 1

3

可以的,方法如下。

首先,您必须覆盖用于呈现表格的默认 table.html 模板(如果您尚未使用自己的模板)。您可以从 django-tables2 中包含的那个开始。

其次,在模板中,找到用于排序的锚点:

{% if column.orderable %}
   <th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}">{{ column.header }}</a></th>
{% else %}

并将其更改为:

{% if column.orderable %}
   {% with "-"|add:column.name as sort_col_name %}
   <th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.opposite|default:sort_col_name %}">{{ column.header }}</a></th>
   {% endwith %}
{% else %}

所以我们基本上只是-在默认情况下在列名前面添加a,以便在页面加载时没有排序时强制降序排序,并转向.opposite而不是.next。我们需要这样做,因为.next将始终被定义,而.opposite在页面加载时将是 None 没有排序,并且默认过滤器将被执行。定义排序后,.opposite将正确切换排序顺序。

请注意,这未经测试,如果您有问题,请查看django-tables2 源以获取更多信息。

于 2013-02-21T20:10:46.770 回答