2013-02-19 92 views
1

当django-tables2呈现未排序的表,并且我想按一列排序时,我点击它,默认行为是按升序排序。Django tables2设置默认排序为降

有什么办法可以改变它,以便第一次点击以降序排序?

回答

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而不是.next。我们需要这样做,因为.next将始终被定义,而.opposite在没有排序的页面加载时将为None,并且默认过滤器将被执行。当定义排序时,.opposite将正确切换排序顺序。

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

+0

谢谢,工作过的魅力! - 我得到了模板中的那个位置,但没有意识到.opposite和| default过滤器是保持整洁的一种非常简洁的方式。 – Kerridge0 2013-02-22 12:39:44