2013-02-19 98 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