Django tables2将默认排序设置为降序

时间:2013-02-19 11:40:11

标签: django django-tables2

当django-tables2呈现未排序的表,并且我想按一列排序时,我单击它,默认行为是按升序对其进行排序。

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

1 个答案:

答案 0 :(得分: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 %}

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

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